进入插入模式时光标定位

时间:2010-09-09 12:12:43

标签: vim

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

我无法找到这种行为的文档,但这对我来说似乎很奇怪。这背后的原因是什么(为了我自己的好奇心),我该如何解决它(或处理它)?

7 个答案:

答案 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 在行尾快速开始输入。