【发布时间】:2012-02-02 00:34:16
【问题描述】:
由于我经常不使用 vim 提供的出色动作和文本对象,(并且因为 "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 命令行会改变不应该的状态。我怎样才能约束自己不得不使用更复杂的动作?
编辑:为清楚起见,在前两个答案之后编辑了问题,段落重新排序。我希望 vim 提供一些帮助,超越 romainl 的“0 级”。到目前为止,答案建议我不要浪费我的时间,但是如果我们假设我是学习技术的粉丝,我通过改变我的环境来改变我的习惯来改变激励机制呢?在这个模型中,我想完成一项任务,比如向下滚动一个页面,我会或多或少地随机尝试组合键,直到完成该任务。我大脑中的多巴胺信号等将加强最终实现这一结果的行动。我可以专注于记住不要使用hjkl,或者我可以专注于我最初尝试做的任务,编辑文本,并且不假思索地发现自己使用更有效的编辑技术。
【问题讨论】:
-
对于记录设置
mouse=a允许您将 Up/Down 映射到并且仍然有一个工作滚轮(如果您需要,也可以启用鼠标选择)。
标签: vim