在Vi中移动到行尾字符,超过该行的最后一个字符。

10

在Vi中,当我按下$时,它会跳转到行的最后一个字符,而不是行尾字符。如何在一次按键中到达行尾字符,最快的删除行尾字符的方法是什么?


你是指换行符吗? - user113292
5
如果你确实是指换行符,那么看起来你想要合并这些行。在任何一行上按 J 键都会删除换行符。 - michaeltwofish
@Michealtwofish:你应该把这个发表为一个答案... - sum1stolemyname
@sum1stolemyname 这实际上是对Mark问题的跟进,而Aristotle的答案更全面 :) - michaeltwofish
3
还可以查看:help 've',将其设置为onemore将允许将光标定位在最后一个字符之后。然而,这并不完美,因为例如,如果选择的结束位置是在行末的最后一个字符处,>仍然会表现得不一致 :( - Evgeni Sergeev
嗯...现在看起来它又开始一致地工作了! :) 要么我写的时候搞砸了,要么是因为我现在使用的机器/设置不同。 - Evgeni Sergeev
3个回答

8
在Vi中,当我按下$时,为什么它会跳到行的最后一个字符而不是行尾字符?
因为这已经足够满足你可能想要实现的任何操作。
如何在一次按键中到达行尾字符?
你基本上永远不需要这样做。只需根据您希望通过转到换行符来实现的目标执行下一步即可。例如:
删除行尾字符的最快方法是什么?
只需按J以连接行。 (如果启用了autoindent或friends,则甚至会为您处理从连接行中删除缩进。)如果您不想要刚刚得到的额外空格字符,请使用x;或者直接使用gJ开始。

5
+1: 好的解释。你也可以使用gJ而不是 Jx来无空格拼接(它的优点是只需一个操作,这样.将重复拼接而不是字符删除)。 - DrAl
啊,不错。我之前没有遇到过这个问题。我已经相应地修改了我的答案。 - Aristotle Pagaltzis
我不同意,因为我有一个使用案例需要超过最后一个字符:这是为了使宏行为一致。 - Evgeni Sergeev
@EvgeniSergeev:缺少太多详细信息以便有用地回答。 - Aristotle Pagaltzis
@AristotlePagaltzis确实如此。这是一个真实生活中的用例,我正在编写一个宏来替换某些v1-v2出现为subtract(v1,v2)。它基于首先使用鼠标选择v1-v2,然后调用宏。问题在于\>通常将光标放在最后一个字符之后,但当它是行末的最后一个字符时,它会在最后一个字符之前。因此,在这种情况下,宏会切掉最后一个字符。通过:set ve=onemore`,它可以始终正常工作。 - Evgeni Sergeev

3

0

当你学习vi/vim时,大多数人都会告诉你输入"i"以开始插入模式,但由于其他编辑器的操作方式,几乎所有人都会跳过基本的“编辑”操作(许多人直到太晚才意识到这一点,可能因此而感到羞愧,但我不会)。

在命令模式下,你可以找到光标闪烁的位置/字符,并有三个编辑选项:

  • "i"- 在该字符之前编辑(插入,在按ESC键之前继续编辑)
  • "r"- 在该字符处编辑(替换,一次性动作,立即返回命令模式)
  • "a"- 在该字符之后编辑(添加,在按ESC键之前继续编辑)

因此,使用"l""$""END"键只能定位到最后一个字符。在那里,你决定编辑的命运,在这种情况下,我们选择"a"继续编辑。剩下的部分是编辑完成后按ESC键。


编辑:除了 i,r,a 之外,也可以使用它们的大写版本,通过 SHIFTCAPS LOCK

  • I - 跳转到行首并开始插入,直到按下 ESC 键
  • R - 连续替换直到按下 ESC 键
  • A - 在最后一个字符后跳到行尾并开始追加,直到按下 ESC 键

在这种情况下,A 更可取。


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