我最终决定放弃导航键,转而使用hjkl
我使用Vim hardmode插件禁用了导航键。
我习惯了快速导航,但是事实证明插入时导航模式突然变得不可能。
对此有解决方案吗? (退出插入模式不是解决方案)。

评论

是的:使用箭头键:-)这就是它们的用途;-)

@Carpetsmoker如果有方向键,我会用它们代替hjkl ....

但想法是,退出插入模式(即,仅将其用于其含义,即,将小插入插入其他命令)才是解决方案。如果我没记错的话,我会在帮助中看到它,如果找到链接,我会发布它。似乎您已经习惯了太多,而不是按箭头键。

您可以将键盘绑定为使用箭头作为快捷键,例如 super + j 向下移动。 super 可以是任何按钮,例如 Caps Lock 很常见

#1 楼

您有很多选择。一种选择,而IMO最简便的选择就是停止禁用箭头键。我了解为什么许多硬派的vimmer会说诸如

之类的话,所以永远不要再使用箭头键!每次使用箭头键,都浪费了3分钟的时间,一只小狗死了,有人切换到了Emacs!

(显然我是在开玩笑)但是,箭头键是有目的的。它们对于导航非常有用:


在插入模式下


在命令行中



通常,当人们告诉您不要使用箭头键时,这是因为他们希望您以更像Vim的方式重新学习导航。如果您对hjkl感到满意,并且大多数情况下在插入模式下使用箭头键,则没有充分的理由强迫自己不要使用它们。这很不错,因为您可以停留在家中,并且非常适合您在正常模式下使用ctrl-hjkl学习到的肌肉记忆。实际上,这就是我要做的。这种方法的主要缺点是,在终端vim中设置可能会很麻烦,因为hjkl会产生一个<C-j>字节。我使用Gvim解决了这个问题。我不知道是否有一个简单的控制台vim修复程序。
选项#3是使用NUL进行小的正常模式移动。例如,如果您键入
Hello world!
     cursor^

,但您发现自己忘记了逗号,而不是用leftleftleftleftleftleft代替,则可以简单地执行<C-o><C-o>b<C-o>h,或任意其他喜欢的正常模式运动组合。
当然,另一种方法,我非常喜欢的一种方法是只使用Esc,在返回插入模式之前进行一些小动作。您提到您不愿意这样做,但是有时候这确实是最有效的方法。
也可能还有其他方法,但是我喜欢这些对我有用的方法。

评论


有趣-我注意到您使用 gk和 gj而不是。这是为什么?

–凯尔·斯特兰德(Kyle Strand)
16年11月16日在0:42

@kylestrand gk和gj可视地在一行中上下移动,即使该行被包裹了。

–詹姆斯
16年11月16日在0:44

我认为这不足以单独提供答案,但是我喜欢在正常模式下(这迫使我学习HJKL)禁用箭头键,并在所有其他模式下启用(noremap ...)。您在正常模式下花费了足够的时间来学习HJKL,但是当您需要时他们就在那里。或者至少,我发现这是在始终关闭或始终打开它们之间的一个舒适的中间立场,它不需要重新映射其他键(很多人喜欢Ctrl-HJKL来在窗格之间移动)。

–伊泰·费伯(Itai Ferber)
16年11月16日1:00



顺便说一句,BASH等人支持vi键绑定。使用这些映射,您可以并使用hjkl浏览cmd历史记录(向上/向下)或修改当前命令(向左/向右)

–罗夫
16-11-23在8:34



#2 楼

我喜欢使用Control键将hjkl移动键转换为“通用”移动键。这是我的.vimrc的相关位:

" In insert or command mode, move normally by using Ctrl
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
cnoremap <C-h> <Left>
cnoremap <C-j> <Down>
cnoremap <C-k> <Up>
cnoremap <C-l> <Right>


inoremap语句适用于插入模式,而cnoremap语句适用于命令模式。 (我一直在使用这种映射,以至于我忘记了没有它,是否有任何方法可以浏览命令模式历史。)

(编辑:我看到另一个答案已经提到了这种可能性。不过,查看实际的映射命令可能会有所帮助。)

#3 楼

按esc,然后使用hjkl和wWbB以及您要进行的其他任何导航。困难模式的全部目的是让您学习如何以更复杂的vim运动进行导航。进行少量编辑,然后使用常规模式移至新位置。

如果您不想学习如何在启用硬模式的情况下更快地导航,请查看关于同一主题的另一个问题的答案。

#4 楼

如果您只需要修改少量文本或单词,则可以使用<Ctrl-O>h/j/k/l。如果您需要进入普通模式以进行较小的移动,则可以节省一些按键操作。

Ref:
1。 http://vim.wikia.com/wiki/Use_Ctrl-O_instead_of_Esc_in_insert_mode_mappings

#5 楼

如果要移动一个或两个以上的位置...
...最好的选择是按ESC,四处移动,然后再次回到插入模式。
创建映射没有意义就像<C-h>向左移动然后开始多次敲击一样...作为vim用户,您不应多次敲击同一键来实现智能移动。
(如果ESC键不是
如果要在插入模式下移动一个或两个位置,
...一个不错的选择是使用<Leader>键定义一些动作:
(我将,用作<Leader>键,因为它感觉很贴近我的手指)
noremap! <Leader>h <left>   "move cursor left
noremap! <Leader>j <down>   "move cursor down
noremap! <Leader>k <up>     "move cursor up   
noremap! <Leader>l <right>  "move cursor right
noremap! <Leader>w <esc>wi  "move one word forward
noremap! <Leader>e <esc>ei  "move forward to the end of word
noremap! <Leader>b <esc>bi  "move one word backward