在插入模式下导航


19

我最终决定放弃使用箭头键进行导航,而选择hjkl。我使用Vim hardmode插件禁用了箭头键。

我习惯了快速导航,但事实证明突然无法在插入模式下导航。

有什么解决办法吗?(现有的插入模式不是解决方案)。


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

@Carpetsmoker,如果箭头键可用,我会用它们代替hjkl。...–
stdcall

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

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

Answers:


25

您有很多选择。一种选择,而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,先做一些小动作,然后再回到正常模式。您提到您不想这样做,但是有时候这确实是最有效的方法。

可能还有其他方法,但是我喜欢的那些方法对我有用。


2
有趣-我注意到您使用<c-o>gk<c-o>gj代替<Up><Down>。这是为什么?
凯尔·斯特兰德

4
@kylestrand gk并在gj视觉上在一行中上下移动,即使该行已被包裹也是如此。
DJMcMayhem

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

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

9

我喜欢使用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然后使用hjklwWbB您要进行的其他导航。困难模式的全部目的是使您学习如何以更复杂的vim运动进行导航。进行少量编辑,然后使用常规模式移至新位置。

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


3

如果要移动一个或两个以上的位置...

...最好的选择是点击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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.