在Vim中进行剪切和粘贴而不移动下一行

3
当我在VIM中按下v键进行复制和粘贴操作,然后使用$键到达行尾,在按下d键时,下一行会被移动到我要剪切的同一行。
如何停止这种情况发生?
4个回答

8

当你删除包括换行符在内的所有字符时,它会向上移动。

像往常一样,Vim 有多种解决方案。没有“唯一正确的方法”,但你可以尝试以下命令。

  • 你可以在正常模式下使用 D(大写),它将删除直到行末的所有内容。

    参见 :help D

  • 使用其他动作

    你可以使用 g_ 而非 $ 移动到行末,它将移动到该行的最后一个非空格字符,并且不会选择换行符。

    参见 :help g_

    因此,vg_d 应该能够达到你想要的效果。

  • 使用替换

    或者,你可以使用替换而非剪切,用空格替换被删除的字符。

    因此,v$rSPACE 可以实现删除,但不会将替换的字符保存在寄存器中(例如用于粘贴)。


1

要从当前光标位置删除所有内容直到结尾,请使用C

:he C将帮助您:

从光标位置删除到行末以及[count]-1行[进入register x],并开始插入。与c$(不是|linewise|)同义。

这样做会导致当前行(假设您在按下C时位于该行开头)变为空,并且默认情况下,内容被复制到寄存器"中。


编辑: 正如Xavier在他的评论(和他的答案)中指出的那样,也可以使用D来实现相同的效果。它还会剪切从当前光标位置到行尾的所有内容,但不会在执行操作后进入插入模式。


我不知道C,但我不确定OP是否想要替换剪切文本。然而,D存在并且似乎工作正常。 - Xavier T.
@Xavier:谢谢你提醒我使用 D。它几乎和进入插入模式一样。已更新答案。 - eckes

0

如果您使用这些按键序列,则下一行将不会向上移动。

v $ h d

它正在向上移动,因为EOL字符 $ 也在删除的同时,没有将光标向左移动1个字符。


0

直接跳过可视模式,交换另外两个命令,即按下d$

这比你最初的方法更短,并且不会打破你的传统,介绍其他你可能不熟悉的按键。


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