进入插入模式时的光标定位

52
当我在Vim中切换到命令模式时,当光标位于单词的末尾或上面时,它似乎会向后移动一个字符,而且当我用$到达行尾时,它并不会到达实际的行尾,而是到达最后一个单词的前一个字符,l("el")也不能把光标向前移动,我不得不使用箭头键移动光标。
我找不到这种行为的文档,但这对我来说很奇怪。这背后的原因是什么(只是出于我的好奇心),我该如何解决它(或处理它)?
7个回答

83

如果你使用gvim,光标会发生变化,这样会更加清晰明了。

在gvim中,插入模式下的光标是一个I形光标,因为你输入的下一个字母将插入到|之后。正常模式下的块状光标,因为你输入的下一个字符可能只影响当前高亮的字母(例如使用x、s等)。因此,插入模式实际上是添加文本,而正常模式是以某种方式修改文本。

因此,在正常模式下,跳转到行末实际上只意味着最后一个字符,因为那是唯一可能被修改的东西。在插入模式下,光标会超过最后一个字符,因为可以在其后添加内容。

需要记住的一件事是,您可以控制从正常模式到插入模式时结束块的哪一侧



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

假设你有t[h]is text





此时,如果按i键,光标会像这样(在gvim中,|表示插入模式光标)

假设你有t|his text





如果按a键而不是i,它会像这样

假设你有th|is text





另一件需要记住的事情(正如pavanlimo所提到的),从正常模式下,您可以使用shift-I或shift-A将光标放在行首第一个字符之前或行末最后一个字符之后进入插入模式。


35
按下键盘上的字母"a",是我长久以来一直渴望的事情。谢谢Matt。 - AshleyS
4
非常感谢您指出“a”。我会铭记今天。 - Alice
1
我该如何在光标当前所在位置的字符后面插入一个字符? - Nikhil CSB
1
这是最重要的事情,但没有一个教程提到它!对于 Python 来说非常重要。 - cikatomo

27

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

Shift + a

这个有效,原因是A。你可以在这里阅读更多信息。 - dexhunter

11

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

实际上,在命令模式下没有必要将光标移动到最后一个字母后面,如果你想要添加内容,可以按下 a 进入插入模式,此时光标会出现在该字母的 后面


11

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

set virtualedit=onemore

通过此选项,您可以将光标移到行末并按下i键,在最后一个字符后进入插入模式。

这种方法解决了问题,但个人认为这种行为有点奇怪。只有在少数情况下才会遇到该问题,因此忽略它可能是值得的;-)


5

在光标能否移动到行末的情况下,实现方式可能会有所不同(至少在我的编辑器的VIM仿真模式中有此选项)。在这种情况下,您可以按下a进入插入模式并从当前字符后开始编辑(而不是i)。


4

按下i键将在光标前进入插入模式, a键将在光标后进入插入模式, I键将在第一个非空字符之前进入插入模式, A键将在行末进入插入模式。

因此,使用A键可以快速在行末开始输入。


1

我建议

:set virtualedit=onemore
:inoremap <Esc> <Esc>`^

你为什么建议更改i命令(进入编辑模式)? - Diego Oliveira
防止光标向左移动一个字符。 - Alexey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接