当我在Vim中切换到命令模式时,光标似乎在一个单词的结尾或单词上移回一个字符,当我用$
到达行尾时,它在最后一个单词结尾之前没有到达实际行尾,但是l
(“el”)不会向前移动,我必须使用箭头键到达那里。
我无法找到这种行为的文档,但这对我来说似乎很奇怪。这背后的原因是什么(为了我自己的好奇心),我该如何解决它(或处理它)?
答案 0 :(得分:56)
如果你使用光标改变的gvim,那就更清楚了。
gvim中的插入模式将光标作为工字梁,因为您键入的下一个字母将在|后插入。普通模式具有块光标,因为您键入的下一个内容可能只会影响当前突出显示的字母(如果您使用x,s等)。因此插入模式实际上是添加文本,但普通模式是以某种方式修改文本。
因此,在正常模式下,跳到行的末尾实际上只意味着最后一个字符,因为这是可以修改的最后一个字符。在插入模式下,光标将传递最后一个字符,因为之后可以添加内容。
要记住的一件事是,您可以控制最终从正常模式到插入模式的块的哪一侧发生在其中<
([]表示块光标位于h)
假设你有[h]是文字
如果您此时按下i,光标将如下所示(在gvim中)
(|是插入模式游标)
假设你有他的文字
如果你按了一个而不是我,它看起来像这个
假设你有文字
要记住的另一件事(如pavanlimo提到的),从普通模式开始,您可以使用光标在行的第一个字符之前,或者在最后一个字符之后,使用shift-I或shift-A进入插入模式。 / p>
答案 1 :(得分:18)
我不太确定它背后的原因,但你可以通过按下来解决它:
Shift + a
答案 2 :(得分:10)
您可能对选项 virtualedit 以及以下值感兴趣:
set virtualedit=onemore
使用此选项,您可以将光标移动到行尾的一个字符,然后按 i 在最后一个字符后插入模式。
这在某种程度上解决了这个问题,但我个人认为这种行为有点奇怪。只有在少数情况下你会遇到问题所以可能值得忽略它; - )
答案 3 :(得分:9)
这是因为您使用的所有命令都会影响光标所在的字母。如果按实际字母后面的 x (删除1个字母)没有意义。
如果你想要的话,实际上不需要在最后一个字母后面的命令模式下移动光标。追加你可以按 a ,将光标放在字母的插入模式中。
答案 4 :(得分:5)
它取决于游标是否可以移动到行尾(至少它是我编辑器的VIM仿真模式中的一个选项)。您可以按a
进入插入模式,并在此情况下(而不是i
)之后开始编辑当前字符。
答案 5 :(得分:1)
我建议
:set virtualedit=onemore
:inoremap <Esc> <Esc>`^
答案 6 :(得分:0)
按i
会进入光标前的插入模式
a
光标后
I
在行中第一个非空字符之前
A
在行尾。
因此,使用 A
在行尾快速开始输入。