进入插入模式时光标定位

hat*_*rix 35 vim

当我在Vim中切换到命令模式时,光标似乎在一个字的末尾或一个字上移回一个字符,当我到达行尾时$,它不会到达实际结束时但是在最后一个单词结尾之前有一个字符,并且l("el")不会向前移动它,我必须使用箭头键到达那里.

我无法找到这种行为的文档,但这对我来说似乎很奇怪.这背后的原因是什么(为了我自己的好奇心),我怎么能绕过它(或处理它)?

Mat*_*ggs 58

如果你使用光标改变的gvim,它会更清楚一些.

gvim中的插入模式将光标作为工字梁,因为您键入的下一个字母将在|后插入.普通模式具有块光标,因为您键入的下一个内容可能只会影响当前突出显示的字母(如果您使用x,s等).因此插入模式实际上是添加文本,但普通模式是以某种方式修改文本.

所以在正常模式下,跳到行的末尾实际上只意味着最后一个字符,因为这是可以修改的最后一个字符.在插入模式下,光标将传递最后一个字符,因为之后可以添加内容.

要记住的一件事是,您可以控制块的哪一侧最终从正常模式进入插入模式



假设你有[h]是文本

([]表示块光标位于h)



假设你有他的文字

如果你此时按了i,光标看起来像这样(在gvim中)(|是插入模式光标)



假设你有文字

如果你按了一个而不是我,它会是这样的



要记住的另一件事(如pavanlimo提到的),从普通模式开始,您可以使用光标在行的第一个字符之前,或者在最后一个字符之后,使用shift-I或shift-A进入插入模式.

  • 按键'a'是我一直渴望的.谢谢马特. (18认同)
  • 非常感谢您指出“a”。我会记住这一天。 (2认同)

pav*_*imo 18

我不太确定它背后的原因,但你可以通过按下来解决它:

Shift + a
Run Code Online (Sandbox Code Playgroud)


jce*_*ceb 10

您可能对virtualedit选项和以下值感兴趣:

set virtualedit=onemore
Run Code Online (Sandbox Code Playgroud)

使用此选项,您可以将光标移动到行尾的一个字符,然后按i在最后一个字符后插入模式.

这在某种程度上解决了这个问题,但我个人觉得这种行为有点奇怪.只有少数情况下你会遇到问题所以可能值得忽略它;-)


Geo*_*lly 9

那是因为你使用的所有命令都会影响光标所在的字母.如果按实际字母后面的x(删除1个字母)没有意义.

实际上不需要在命令模式下将光标移动到最后一个字母后面,如果你想要追加,你可以按下一个将光标置于插入模式后面的字母.


Mar*_*ins 5

它取决于游标是否可以移动到行尾(至少它是我编辑器的VIM仿真模式中的一个选项).a在这种情况下,您可以按进入插入模式并在当前字符后开始编辑(而不是i).