为什么 vim 中 `ESC` 会将光标移回原处?

为什么 vim 中 `ESC` 会将光标移回原处?

在vim中,当我点击ESC返回命令模式时,光标向左移动一个字符。这不是我所希望的,有时我会立即l点击回到那个位置,也许是删除一个角色。

这种行为有原因吗?这对于我所缺少的使用模式来说方便吗?

答案1

在插入模式下,光标位于字符之间、第一个字符之前或最后一个字符之后。在正常模式下,光标位于字符上方(换行符不是用于此目的的字符)。这有点不寻常:大多数编辑器总是将光标放在字符之间,并且大多数命令都作用于字符(严格来说,不是在下面) 光标。这可能部分是由于在 GUI 出现之前,文本终端总是显示光标在字符上(下划线或块,可能会闪烁)。这种抽象在插入模式下失败,因为这需要多一个位置(柱子与栅栏)。

可以这么说,模式之间的切换必须将光标移动半个字符。该i命令向左移动,将光标放在结束的字符之前。命令a向右移动。如果可能的话,退出插入模式(通过按Esc)会将光标向左移动(如果它位于行的开头,则会向右移动)。

我认为这种Esc行为是有道理的。通常,您在行尾打字,并且Esc只能向左输入。所以一般行为是最常见的行为。

将光标下的字符视为最后一个有趣的字符,并将插入命令视为a。您可以a Esc在不移动光标的情况下重复,但如果您从非空行的开头开始,您将被向右移动一个位置。

答案2

从视觉上看,它在 gvim 中更有意义:

编辑时,光标位于字符之间:
在此输入图像描述

在正常模式下,它位于最后一个字符的顶部:
在此输入图像描述

所以它并没有真正返回一个角色,只是从之间 rs成为 r

答案3

此行为是可编辑的正如这里所回答的,但停下来想一想发生了什么。当您处于插入模式时,您实际上不是在字符上方,而是在它们之间。当您插入某些内容时,光标会跳到您插入的内容的末尾,以便插入的下一个内容将在此之后。现在想想,如果您刚刚输入了一封信,然后想对其做一些事情。点击Esc会将选择光标直接放在您插入的最后一个字符上。如果不这样做的话,其实会比较尴尬。

您可能想到的情况是,当您处于插入模式时,像正常模式一样移动,然后切换。在这种情况下,光标确实会返回一个字符,但如果您这样认为,则表明您处于插入模式,并且您所做的最后一件事不是插入。也许你应该花更多时间在正常模式下?

答案4

这是我的解决方案。

这是提供的解决方案的更简洁版本关于此的维基页面

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

相关内容