14

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

Ctrl我可以使用+进入可视模式v

如果我然后说做0> C+v> jjj> $> d4 行的文本被删除但行没有被删除。

如何删除文本块并同时删除行,以便任何前面的文本行向上移动到光标?

4

7 回答 7

19

对于这样的事情,我通常使用shift+v, jjj... d,但您也可以使用文本对象进行删除。
:h text-object。几个例子:

di"- 删除内部"
dap- 删除段落周围

当然,您也可以使用除 之外的其他命令d,例如cor v
我一直使用的东西是ci(andci"用于编辑()"".

可以在这里找到更多使用文本对象和可视模式的酷示例:使用
Vim 最高效的快捷方式是什么?


您也可以使用,即4ddFDinoff 提到的,或 Jens 提到的范围。但是在大多数情况下,我个人认为使用视觉线 ( shift+v) 更灵活,您不必计算线或任何东西。这很容易记住,您会立即看到结果,不会错过计数行,即使您位于屏幕的顶部/底部,它也会起作用。

于 2013-05-23T19:07:22.807 回答
12

使用任4dd一删除 4 行文本。

或者

使用逐行视觉块。<S-v>然后移动到要删除的最后一行,然后按d

于 2013-05-23T19:11:25.230 回答
7

如果块真的很大,并且您懒得计算要删除的行数,但是您知道第一行和最后一行的编号(:set number帮助),您可以随时进入 ex 模式并

 :3,1415d

从第 3 行到第 1415 行删除。

于 2013-05-23T19:15:57.693 回答
6

<C-v>让您进入“视觉块模式”。在该模式下,您对一个矩形(“可视块模式”中的“块”)进行操作,该矩形可能会或可能不会覆盖您要删除的线条。d仅作用于该块中包含的字符,使行保持原样。

您想要的是“视觉线模式”,您可以在其中专门针对线条进行操作。在普通模式或任何其他视觉模式下,点击V(Shift + v),移动光标以定义您的选择,然后点击d

于 2013-05-23T19:26:35.983 回答
3

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

4dd

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

:3,24d 

将删除第 3-24 行。

.

.

.

在使用 ex 行寻址时,这里有一些有用的特殊字符:

 .       : 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
于 2014-08-30T23:40:43.763 回答
1

或者d with motion例如

d3j

命令也:d很灵活。查看帮助以获取详细信息

于 2013-05-23T20:49:51.230 回答
0

您可以使用书签。用书签标记第一行,例如,'e' 在命令模式下(如果在 INSERT 模式下,请按 ESC)按

m e 

用书签“e”标记第一行。

然后转到您要删除的最后一行并将其添加为书签,并说“f”

m f

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

:'e,'f d
于 2018-10-02T15:58:50.173 回答