在插入模式下使用<Ctrl-h|j|k|l>移动光标的Vim技巧

3

我对Vim相当陌生,我正在考虑设置它,以便可以在插入模式下使用Ctrl +移动键(H, J, K, L)进行移动。

两个问题:

  1. 如何在.vimrc中设置?
  2. 这是否可行(至少考虑一下),还是纯粹的“倒退”?

6
当然你可以这样做,但这不是插入模式的用途。在插入模式下,你只应该插入文本,而不是移动光标,这是正常模式的职责。建议你限制所有插入模式的移动仅限于一行:对于其他移动,正常模式更加方便,但为了后退一个字符/单词而切换到正常模式则有些繁琐。 - ZyX
3个回答

21

你知道在插入模式下按下CTRL-O可以临时切换到正常模式,执行一次正常模式命令吗?因此,CTRL-O j、CTRL-O k等均可。但是CTRL-O ^等命令也同样适用。


1
对此点赞,以前从不知道,普通命令如此强大,你只需要使用一个就可以到达大多数地方。"<CTRL-O> 2k"我会经常使用。 - Mike

12
你可以通过以下映射实现你想要的效果:
inoremap <c-k> <up>
inoremap <c-j> <down>
inoremap <c-h> <left>
inoremap <c-l> <right>

我认为这种方式没有什么大问题,尽管你会失去现有的映射(例如<c-l> 重新绘制屏幕)。

纯粹主义者可能会因为在浏览文件时保持插入模式而感到不满,但还有更糟糕的事情。


6
确实有更糟糕的错误,比如不得不按住 Ctrl 键才能移动文件。 - Randy Morris
这很好用。我已经将Caps-Lock键重新映射为Ctrl键。这意味着我可以轻松地将小指向左移动1厘米,然后在插入模式下使用H、J、K、L进行移动。如果有更符合人体工程学的方法来在插入模式下移动,我会很高兴知道。否则,我不理解为什么有人认为不应该在插入模式下移动光标,仅仅是为了“不在插入模式下移动”,或者说这就是正常模式的作用。为什么?为什么不能在插入模式和正常模式下都能移动光标呢?Vim难道不应该让你的手指更轻松,让你打字更少,完成更多的工作吗? :) - Henrik
我还将<C-Space>映射为切换模式。本质上,让我的小指始终放在大写锁定键上(即Ctrl键)。 - Henrik
1
很抱歉评论这么老的答案,但是在我的终端上,这个解决方案会破坏 Shift+Backspace,因为它被映射到 ^H - farsil

7
人们已经告诉你如何做到这一点,因此我只想回答你问题的第二部分。
我不太明白使用Vim而不使用模式的意义所在。这种设置的主要问题是您将移动能力限制为“向任何方向移动一个字符”。这并不是“错误”,这只是低效的。什么是 FfTt(向前/向后移动到一个字符)?什么是 0$(移动到行的开头和结尾)?什么是段落/句子移动([]{})?什么是匹配括号(%)?等等。
在我看来,学会使用正常模式移动的全部功能比将您的移动能力缩小到 hjkl 更好。

就我所知,我完全同意你的观点。当我发布我的答案时,我假设 OP 想要在某些情况下更快地按 <C-l> 而不是 <ESC>la - Prince Goulash
我主要想要的是能够从当前行移动到上一行/下一行的可能性,但也可以使用 Ctrl + home 行移动键向左和向右移动。 - Henrik
2
只用按一次Ctrl+hjkl就能移动一个字符,但当你在“或()的错误一侧时,这种方法就不太好用了。 - Bakos Bence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接