$
到达行尾时,它并不会到达实际的行尾,而是到达最后一个单词的前一个字符,l
("el")也不能把光标向前移动,我不得不使用箭头键移动光标。我找不到这种行为的文档,但这对我来说很奇怪。这背后的原因是什么(只是出于我的好奇心),我该如何解决它(或处理它)?
$
到达行尾时,它并不会到达实际的行尾,而是到达最后一个单词的前一个字符,l
("el")也不能把光标向前移动,我不得不使用箭头键移动光标。如果你使用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将光标放在行首第一个字符之前或行末最后一个字符之后进入插入模式。
这是因为你使用的所有命令都会影响到 光标所在位置的字母。如果在实际字母后面按下 x(删除一个字母)是没有意义的。
实际上,在命令模式下没有必要将光标移动到最后一个字母后面,如果你想要添加内容,可以按下 a 进入插入模式,此时光标会出现在该字母的 后面。
你可能会对选项virtualedit和以下值感兴趣:
set virtualedit=onemore
通过此选项,您可以将光标移到行末并按下i键,在最后一个字符后进入插入模式。
这种方法解决了问题,但个人认为这种行为有点奇怪。只有在少数情况下才会遇到该问题,因此忽略它可能是值得的;-)
在光标能否移动到行末的情况下,实现方式可能会有所不同(至少在我的编辑器的VIM仿真模式中有此选项)。在这种情况下,您可以按下a
进入插入模式并从当前字符后开始编辑(而不是i
)。
按下i
键将在光标前进入插入模式,
a
键将在光标后进入插入模式,
I
键将在第一个非空字符之前进入插入模式,
A
键将在行末进入插入模式。
因此,使用A
键可以快速在行末开始输入。
我建议
:set virtualedit=onemore
:inoremap <Esc> <Esc>`^