我最终决定放弃使用箭头键进行导航,而选择hjkl
。我使用Vim hardmode
插件禁用了箭头键。
我习惯了快速导航,但事实证明突然无法在插入模式下导航。
有什么解决办法吗?(现有的插入模式不是解决方案)。
我最终决定放弃使用箭头键进行导航,而选择hjkl
。我使用Vim hardmode
插件禁用了箭头键。
我习惯了快速导航,但事实证明突然无法在插入模式下导航。
有什么解决办法吗?(现有的插入模式不是解决方案)。
Answers:
您有很多选择。一种选择,而IMO最简便的选择就是停止禁用箭头键。我了解为什么许多硬派Vimmer会说类似
您永远不要再使用箭头键!每次使用箭头键,都会浪费3分钟的时间,一只小狗死了,有人切换到了Emacs!
(显然,我在开玩笑)但是,方向键有一个用途。它们对于导航非常有用:
在插入模式下
在命令行中
通常,当人们告诉您不要使用箭头键时,这是因为他们希望您以更像Vim的方式重新学习导航。如果您习惯使用hjkl
,并且大多在插入模式下使用箭头键,则没有充分的理由强迫自己不要使用它们。
选项2是重新映射,ctrl-hjkl
使其像光标键一样。这很不错,因为您可以停留在家中,并且非常适合您已经hjkl
在正常模式下学习过的肌肉记忆。实际上,这就是我要做的。这种方法的主要缺点是在终端vim中设置可能会很麻烦,因为<C-j>
会产生一个NUL
字节。我使用Gvim解决了这个问题。我不知道是否有一个容易解决的控制台vim。
选项#3 <C-o>
用于进行较小的普通模式运动。例如,如果您输入
Hello world!
cursor^
并且您意识到自己忘记了逗号,而不是这样做了leftleftleftleftleftleft,您可以简单地执行<C-o>b<C-o>h
或<C-o>2Fo
或您喜欢的正常模式移动的任何其他组合。
当然,另一种选择,我非常喜欢的一种选择是只使用Esc,先做一些小动作,然后再回到正常模式。您提到您不想这样做,但是有时候这确实是最有效的方法。
可能还有其他方法,但是我喜欢的那些方法对我有用。
<c-o>gk
和<c-o>gj
代替<Up>
和<Down>
。这是为什么?
gk
并在gj
视觉上在一行中上下移动,即使该行已被包裹也是如此。
noremap <Up> <NOP>
...) 。您在正常模式下花费了足够的时间来学习HJKL,但是当您需要时他们就在那里。或者至少,我发现这是在始终关闭或始终打开它们之间的一个舒适的中间立场,它不需要重新映射其他键(很多人喜欢Ctrl-HJKL在窗格之间移动)。
我喜欢使用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
于命令模式。(我使用这种映射已经有很长时间了,以至于我忘记了如果没有它,是否有任何方法可以浏览命令模式历史。)
(编辑:我看到另一个答案已经提到了这种可能性。不过,查看实际的映射命令可能会有所帮助。)
...最好的选择是点击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
如果您只需要修改少量文本或单词,则可以使用<Ctrl-O>h/j/k/l
。
<Ctrl-O>
仅使该命令返回正常模式,然后又回到插入模式,因此,如果您需要进入正常模式以进行较小的移动,则可以节省一些按键操作。
参考:1. http://vim.wikia.com/wiki/Use_Ctrl-O_instead_of_Esc_in_insert_mode_mappings