进入插入模式时光标定位

问题描述 投票:33回答:6

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

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

vim
6个回答
56
投票

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

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

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

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

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

假设你有[h]是文本

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

假设你有他的文字

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

假设你有文字

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


18
投票

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

Shift + a

10
投票

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

set virtualedit=onemore

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

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


9
投票

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

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


5
投票

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


1
投票

我建议

:set virtualedit=onemore
:inoremap <Esc> <Esc>`^
© www.soinside.com 2019 - 2024. All rights reserved.