【发布时间】:2010-09-09 12:12:43
【问题描述】:
当我在 Vim 中切换到命令模式时,当光标位于单词的末尾或单词上时,它似乎向后移动了一个字符,而当我使用 $ 转到行尾时,它不会转到实际的行尾,但在最后一个单词的末尾前一个字符,l ("el") 不会将其向前移动,我必须使用箭头键才能到达那里。
我无法找到有关此行为的文档,但这对我来说似乎很奇怪。这背后的原因是什么(出于我自己的好奇心),我该如何绕过它(或处理它)?
【问题讨论】:
标签: vim
当我在 Vim 中切换到命令模式时,当光标位于单词的末尾或单词上时,它似乎向后移动了一个字符,而当我使用 $ 转到行尾时,它不会转到实际的行尾,但在最后一个单词的末尾前一个字符,l ("el") 不会将其向前移动,我必须使用箭头键才能到达那里。
我无法找到有关此行为的文档,但这对我来说似乎很奇怪。这背后的原因是什么(出于我自己的好奇心),我该如何绕过它(或处理它)?
【问题讨论】:
标签: vim
如果你使用gvim会更清楚一点,光标在哪里改变。
gvim 中的插入模式将光标作为 I 形,因为您键入的下一个字母将插入到 | 之后。普通模式有块光标,因为您键入的下一个内容可能只会影响当前突出显示的字母(例如,如果您使用 x、s 等)。所以插入模式实际上是添加文本,而普通模式是在以某种方式修改文本。
所以在正常模式下,跳到行尾实际上只是最后一个字符,因为这是最后一个可以修改的东西。在插入模式下,光标会经过最后一个字符,因为之后可以添加内容。
要记住的一件事是,您可以控制最终从块的哪一侧从正常模式进入插入模式
([]表示块光标在那个h上)
假设您有 t[h]is 文本
如果此时按下 i ,光标将如下所示(在 gvim 中)
(| 为插入模式光标)
假设你有他的文字
如果你按a而不是i,它看起来像这样
假设你有这个|是文本
要记住的另一件事(如 pavanlimo 所述),从正常模式,您可以使用光标在该行的第一个字符之前或在最后一个字符之后进入插入模式,使用 shift-I 或 shift-A。
【讨论】:
我不太确定它背后的原因,但您可以通过按以下方式解决它:
Shift + a
【讨论】:
A。你可以阅读更多there
您可能对选项 virtualedit 和以下值感兴趣:
set virtualedit=onemore
使用此选项,您可以将光标移动到行尾一个字符,然后按 i 在最后一个字符之后插入模式。
这在某种程度上解决了这个问题,但我个人觉得这种行为有点奇怪。仅在少数情况下您会遇到问题,因此可能值得忽略它;-)
【讨论】:
那是因为您使用的所有命令都会影响 光标所在的字母。 如果在实际字母后面按 x(删除 1 个字母)是没有意义的。
实际上没有必要在命令模式下将光标移动到最后一个字母后面,例如追加您可以按 a 将光标置于 字母的插入模式。
【讨论】:
它取决于光标是否可以移过行尾(至少它是我的编辑器的 VIM 仿真模式中的一个选项)。在这种情况下,您可以按a 进入插入模式并在当前字符之后开始编辑(而不是i)。
【讨论】:
我建议
:set virtualedit=onemore
:inoremap <Esc> <Esc>`^
【讨论】:
按i将进入光标前插入模式
a 光标后
I 行中第一个非空字符之前
A 在行尾。
所以,使用A 在行尾快速开始输入。
【讨论】: