代码之家  ›  专栏  ›  技术社区  ›  hatmatrix

进入插入模式时光标定位

vim
  •  34
  • hatmatrix  · 技术社区  · 14 年前

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

    我还没有找到这种行为的证明文件,但我觉得这很奇怪。这背后的原因是什么(出于我自己的好奇心),以及我如何绕过它(或处理它)?

    6 回复  |  直到 5 年前
        1
  •  57
  •   Community Ramakrishna.p    5 年前

    如果使用gvim,光标会发生变化,这就更清楚了。

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

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

    要记住的一点是,您可以控制块的哪一侧从正常模式切换到插入模式。



    ([]表示块光标在该H上)

    我们假设你有文本。





    如果您在这一点上按i,光标将如下所示(在gvim中) (作为插入模式光标)

    假设你没有他的短信





    如果你按A而不是按I,它会像这样

    假设你有文本





    另一件要记住的事情(如Pavanlimo提到的),从正常模式,您可以使用光标在行的第一个字符之前或最后一个字符之后,使用shift-i或shift-a进入插入模式。

        2
  •  18
  •   pavanlimo    14 年前

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

    Shift + a
    
        3
  •  10
  •   jceb    14 年前

    你可能对这个选择感兴趣 虚拟编辑 以及以下值:

    set virtualedit=onemore
    

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

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

        4
  •  9
  •   Georg Schölly Crazy Developer    14 年前

    那是因为你使用的所有命令都会影响 光标所在的字母。 如果按不下去的话 X (删除1个字母)在实际字母后面。

    实际上不需要在命令模式下将光标移到最后一个字母的后面,如果您想(例如附加),可以按 把光标放在 后面 插入模式中的字母。

        5
  •  5
  •   Mark Wilkins    14 年前

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

        6
  •  1
  •   Alexey alexvassel    10 年前

    我建议

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