删除Vim中的文本块


Delete a block of text in Vim

因此,我可以使用dbdabkbbkd(正常模式)删除一个文本+行,下面的所有文本都向上移动一行。

我可以使用ctrl+vbkbd进入视觉模式

如果我说do 0>C+v>jjj>$>d,则删除4行的文本,但不删除行。

如何删除一个文本块并同时删除行,从而使前面的任何文本行向上移动到光标?


对于类似的内容,我通常使用shift+vjabdxkbdxkbdxkbdxkbdxkbdxkbdxkbdxkbdxkbdxkbdxkbd…xkbd,但也可以使用文本对象删除。见:h text-object。举几个例子:

di"—在"中删除dap—删除段落

当然,您可以使用除d以外的其他命令,例如cv。我一直使用的是ci(ci",用于编辑()""中的内容。

使用文本对象和视觉模式的更酷的例子可以在这里找到:你对Vim最有效的捷径是什么?

您也可以使用fdinoff提到的4dd,或者jens提到的范围。然而,在大多数情况下,我个人认为使用可视线路(SHIFT+V)更为灵活,您不必计算线路或任何东西。这很容易记住,你会立即看到结果,你不会错过计数线,即使你在屏幕的顶部/底部,它也会工作。


使用4dd删除4行文本。

使用线条视觉块。然后移到要删除的最后一行,然后按d键。


如果块真的很大,并且您不必费心计算要删除的行数,但是您知道第一行和最后一行的行数(:set number有帮助),您可以始终转到ex模式,并且

1
 :3,1415d

从第3行到第1415行删除。


使您进入"视觉块模式"。在该模式中,您作用于一个矩形("可视块模式"中的"块"),该矩形可能覆盖或不覆盖您要删除的行。d只对该块中包含的字符起作用,使行保持原样。

你想要的是"视觉线条模式",在这里你具体地在线条上行动。从正常模式或任何其他视觉模式,点击v(shift+v),移动光标定义选择,然后点击d


删除4行文本,从光标所在行开始:

1
4dd

或者使用带有行地址的ex命令d,例如:

1
:3,24d

删除第3-24行。

.

.

.

以下是在使用行寻址时使用的一些有用的特殊字符:

1
2
3
4
5
6
7
8
 .       : current line
 $       : last line
 /text/  : next occurrence of text
 ?text?  : previous occurrence of text
 *       : all text currently on screen
 %       : entire file
 +n      : next n lines
 -n      : previous n lines

d with motion例如

1
d3j

另外,:d命令也很灵活。查看帮助以了解详细信息


你可以用书签。在第一行写上书签,然后说"e"在命令模式下(如果处于插入模式,请按Esc键)按

1
m e

它用书签"e"标记第一行。

然后转到要删除的最后一行加上书签,写上"f"

1
m f

然后可以转到ex模式(使用冒号)并删除行

1
:'e,'f d