vim - 防止在vim中重复使用hjkl移动键

标签 vim

由于我经常不使用 vim 提供的出色 Action 和文本对象,(并且因为 "Holding down 'j' is a vim anti-pattern," )我希望 vim 帮助我训练使用这些而不是使用 hjkl连续几次以上。

刚开始用vim的时候,很生气没用hjkl移动,而是使用箭头键。作为提醒不要这样做,我重新映射箭头键以防止自己使用它们 - 我知道使用主行导航将是一个更好的长期计划,所以我切断了通过使用箭头键获得的积极强化键。

map <left> <nop>   
map <right> <nop>  
# I quickly removed nop's for up and down because using 
#  the mouse wheel to scroll is sometimes useful

我不再需要在我的 .vimrc 中进行这些映射,因为它工作得很好,而且我很快就切换了,无需有意识地这样做。以类似的方式,我现在想停止重复使用基本移动键 hjkl也是。我在设想这样的事情:
let g:last_mov_key = 'none'
let g:times_mov_key_repeated = 0
function! MovementKey(key)
    if (g:last_mov_key == a:key)
        let g:times_mov_key_repeated = g:times_mov_key_repeated + 1
    else
        let g:last_mov_key = a:key
        let g:times_mov_key_repeated = 0
    endif
    if g:times_mov_key_repeated > 3
        echo "Negative Reinforcement!"                             
    endif
endfunction

noremap j :call MovementKey('j')<CR>gj
noremap k :call MovementKey('k')<CR>gk
noremap h :call MovementKey('h')<CR>h
noremap l :call MovementKey('l')<CR>l

但这会在可视模式下中断,我想象在许多其他情况下,在某些事情的中间使用 vim 命令行会改变不应该的状态。我怎样才能约束自己不得不使用更复杂的 Action ?

编辑:为清楚起见,在前两个答案之后编辑了问题,段落重新排序。我希望 vim 提供一些帮助,超越 romainl 的“0 级”。到目前为止,答案建议我不要浪费我的时间,但是如果我们假设我是学习技术的粉丝,我通过改变我的环境来改变我的习惯来改变激励机制呢?在这个模型中,我想完成一项任务,比如向下滚动一个页面,我会或多或少地随机尝试组合键,直到完成该任务。我大脑中的多巴胺信号等将加强最终实现这一结果的行动。我可以专注于记住不要使用 hjkl ,或者我可以专注于我最初尝试做的任务,编辑文本,而无需真正考虑它发现自己使用更有效的编辑技术。

最佳答案

你太听别人的话了。只需使用您最喜欢的任何键来移动,而不要理会其他键。重新映射hjkl键有点麻烦,最好不要这样做,因为它们是 hardcoded由于历史原因在vim中。

关于vim - 防止在vim中重复使用hjkl移动键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105540/

相关文章:

c - Vim 关键字补全

vim - 自 Python 从 3.6.5 升级到 3.7.0 后在启用 Powerline 的情况下启动 Vim 时的弃用警告

Vim 说 "Not an editor command:..."

vim - 在vim中快速突出显示列范围

vim - 如何以不区分大小写的方式从vim打开文件

git - vim打开多个文件

vim - 如何在 Vim 中取消粘贴操作?

vim - 为什么 vim 粘贴的行为取决于 yanking 方法

macos - OSX中的Vim : How to paste text from open window into a open file in vim?

vim - gvim 的尾部功能