在 vim 中,当我离开编辑模式时,防止插入符号移回?

在 vim 中,当我离开编辑模式时,防止插入符号移回?

在 vim 中,如果我进入并退出编辑模式而不执行任何操作,则插入符号将向左移动一个字符。如果我进入并退出追加模式,则插入符号将向前移动,然后向后移动。

有什么方法可以配置 vim 让其在这些情况下不改变插入符号?

理想情况下,我只想始终进入追加模式,但在进入或退出该模式时不移动插入符号。

(目前我通常使用插入模式,因为它不会在输入时弄乱我的插入符号的位置。也就是说,除非我需要附加到行尾,在这种情况下,我发誓 vim 的行为如此过时,按 Esc 并进入附加模式。)

答案1

这个问题经常被新的 vi/Vim 用户问到,答案是,在正常模式下,光标始终位于字符上,但在插入模式下,光标始终位于两个字符之间(请记住,行尾是一个字符)。在控制台 Vim 中,您无法真正看到这种情况,但在 GUI 中,您会注意到,当您进入插入模式时,光标会变成两个字符之间的一条线,而不是在正常模式下光标上方的块。

因此,当您离开插入模式时,您看到的不一定是光标向后移动一个字符,而只是移动到一个字符上。唯一安全的移动方向是向左(或向后)。因此,您有多种进入插入模式的方法:

  • “a” 进入插入模式,光标位于光标所在字符和右边的下一个字符“之间”。
  • “i” 进入插入模式,光标位于光标所在字符和左边的前一个字符“之间”。

有些人努力压制这种他们不喜欢的“运动”,但这不可避免地会干扰他们将来想要运行的插件和其他 Vim 脚本。

我的建议是在适当的情况下习惯使用“a”和“i”(以及“A”和“I”)命令。

“o”和“O”命令也很有用。请参阅:

:help a
:help i
:help A
:help I
:help o
:help O

编辑:如果您仍然决心改变这种行为,请尝试以下提示:防止 Esc 将光标向左移动一个字符

答案2

我认为你所说的“插入”是指光标,如果你使用“i”,则会直接插入光标所在的位置,“a”(我相信你正在寻找)会将光标向右移动一个字符。此外,shift-i(I) 将转到行首,shift-a(A) 将一直​​转到行尾。

如果我误解了您的问题,我深感抱歉。

答案3

由于重新映射<ESC>被认为是“有风险的”,所以我只结合了避免使用 Esc 键方法并在我的中有以下内容.vimrc

 inoremap ii <ESC>l

注意:确保行尾没有空格字符。

很简单,但却完全可以证明“对我来说很好用”,因为这正是我必须手动输入的内容。

无论我是否使用ai我仍然会看到插入符号向后移动的行为,而且它让我非常烦恼,因为很多时候我想要输入的下一件事就是d$删除到行尾等等。

答案4

这是我的解决方案:

au InsertLeave * call cursor([getpos('.')[1], getpos('.')[2]+1])

有趣的是,这三个网站上都存在同样的问题:SO、SU、Unix+Linux。

相关内容