因为我经常不使用优秀的运动和文本对象是Vim中,(既然"按住'J’是一个Vim反模式"),我想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
Run Code Online (Sandbox Code Playgroud)
我不再需要在我的.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
Run Code Online (Sandbox Code Playgroud)
但是这在视觉模式下中断了,我想在很多其他情况下,在某些东西中使用vim命令行会在不应该的时候改变状态.我如何限制自己必须使用更复杂的动作?
编辑:问题在前两个答案后编辑,为清晰起见,段落重新排序.我想从vim超越romainl的"0级"获得一些帮助.到目前为止,答案建议我不要浪费我的时间,但如果我们假设我是学习技术的粉丝,我通过改变我的环境来改变我的习惯以改变激励措施呢?在这个模型中,我想完成一项任务,比如向下滚动页面,我会或多或少地随机尝试组合键,直到我完成任务.我脑中的多巴胺信号传导等将加强最终实现这一结果的作用.我可以专注于记住不使用hjkl,或者我可以专注于我最初尝试做的任务,编辑文本,而没有真正考虑它发现自己使用更有效的编辑技术.
编辑
阅读完你的编辑后,你的评论就是我提出的根本解决方案:重新映射hjkl做出令人讨厌的事情:
nnoremap h $
nnoremap l 0
nnoremap j gg
nnoremap k G
" and so on for other modes
Run Code Online (Sandbox Code Playgroud)
hjkl被映射到与其原始行为极端相反的情况,基本上使它们完全无法使用.你应该做同样为它们的同义词(:h h,:h j,:h k,:h l)也出于完整性,但有些时候字符一个字符/行由行运动是有益的.在这种情况下,你会很高兴有+或-或<Space>.
不过,我真的不喜欢那种帕夫洛伊式的方法.我发现它太残酷了,你实际习惯这些奇怪的映射的风险似乎很高.
结束编辑
精简版:
箭头键也没有hjkl值得使用,所以你的重映射最终是无用的.过了一会儿,你会习惯Vim的动作和文本对象.在此期间使用对您来说更自然的感觉.不要急于求成.它会来.自然.
长版:
你是一个打字员吗?或者你打算学习触摸打字?
我不是一个触摸打字员,我不打算成为一个:我hjkl只使用hjklINSERT模式实际输入.
当我需要在没有特定"目标"的情况下在上方或下方移动1或2行时,我使用箭头键,当我需要向左或向右移动几个字母时,我使用箭头键.这样做并不可耻.
但是,当您键入jjjjjjjjjj或按下向下箭头键10次向下移动10 行时会出现问题:jjjjjjjjjjj显然与↓↓↓↓↓↓↓↓↓↓
这个愚蠢的"不使用箭头键"的咒语只是隐藏森林的树:它经常重复,它会让你专注于无用的模式/反模式,而不是实际学习更强大的方法.
我不想解释美丽你和Vim的问题在于你不会理解vi.但你可以把它看作是"启蒙的水平":
等级0将是
jjjjjjjjjjj或者↓↓↓↓↓↓↓↓↓↓然后所有必要的水平移动来达到你的目标.
阅读上面的hjkl一句话,Vs ←↓↑→辩论绝对是愚蠢的并不是很明显吗?
无论您使用一种方法还是另一种方法,最终都会使键盘垂直和水平移动,以达到您想要编辑的值.多么浪费.浪费时间和精力迫使自己使用一种方法而不是另一种方法,因为两者都同样糟糕.
等级1将是
10j22l向下走10行并向右移动目标22个字符.虽然输入的次数要少得多,但你现在必须计算线条和字符并不是特别好.
等级2将是
10jwww向下移动10行并向右移动目标3个单词或10jf#向下移动10行并跳转到目标的第一个字母(十六进制颜色值).
嗯,那好多了.
等级3将是
/#<CR>直接跳到目标(十六进制颜色值,如前所述).如果它高于你当前的位置,你会这样做?#<CR>.
如果你是一个触摸打字员,或者正在接受培训,那么辩论就会得到解决:( hjkl或者jkl;有些人喜欢重新映射它们)是快速而自然的,你根本不需要箭头键,如果你不是,那么好处使用hjkl过度←↓↑→充其量是最小的.
专注于eEbBwWfFtT/?}和公司.一次一点.不要"强迫"自己.
我发现有效的一件事是:noremap jj <nop>. Vim 会延迟这个j动作,因为它认为你可能会扩展它,这会减慢你的速度以尝试其他的东西。您也不能再按住j键,因为它只会触发 nop。您仍然可以在紧急情况下使用该按钮,但它令人沮丧到足以让您在日常编辑中避免使用它。