如何删除 vi 中的多行?

我试图遵循以下原则:

如何在 VI 编辑器中删除选定的文本

但是

5dd

给予

E492: 不是编辑器命令: 5dd

然后我试着:

5d

只删除一行。如何删除多行?

331773 次浏览

Esc键以确保您没有处于编辑模式。 将光标放在要删除的第一行。 输入 :5dd。 当前行,以及接下来的四行应该被删除。

或者,如果您打开了行号..。

Esc键以确保您没有处于编辑模式。 输入 :#,#d,其中“ #”表示要删除的开始和结束行号。

听起来像是在命令模式下输入命令(也就是。“过时模式”)。在这种情况下,:5d将删除第5行,没有其他内容。为了让 5dd按照预期的方式工作——也就是说,删除从光标开始的五行后续行——在普通模式下输入它,不要在命令前加 :前缀。

我觉得这样更容易

  1. 转到可视模式 Shift + v
  2. 选择线路
  3. 删除 d

Https://superuser.com/questions/170795/how-can-i-select-and-delete-lines-of-text-in-vi

D5d“削减”五行

我通常只是把数字放在中间,就像这样:

删除7个字母

如果您知道行号,您可以删除多个(范围)行:

:[start_line_no],[end_line_no]d

注意: d 表示删除

在哪里,
Start _ line _ no 是要删除的开始行 End _ line _ no 是要删除的结束行。 开始和结束(包括开始和结束)之间的行将被删除。

例如:

:45,101d

45和101之间的线路包括45和101将被删除。

如果你喜欢非视觉模式的方法,并承认行号,我想建议你另一个直接的方法。

例子

我想删除第45行到第101行的文本。

我的方法建议您在命令模式下键入以下命令:

45Gd101G

上面写着:

转到第45行(45G) ,然后从当前行中删除文本(d) ,以 第101行(101G)。

请注意,在 vim上可以使用 gg而不是 G

相比之下,“邦妮 · 瓦尔盖塞”的回答是:

:45,101d[enter]

上面的命令从他的答案需要9次键入包括 enter,其中我的答案需要8-10次键入。因此,我的方法的速度是可以比拟的。

就我个人而言,我个人更喜欢 45Gd101G而不是 :45,101d,因为我喜欢坚持 vi 命令的语法,在本例中是:

+---------+----------+--------------------+
| syntax  | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command |   45G    |        d101G       |
+---------+----------+--------------------+

如果您想在特定的行触发器之后删除一个范围,您可以使用这样的东西

:g/^TMPDIR/ :.,+11d

在每次遇到 ^TMPDIR之后删除11行(包括)。

列出了在正常模式下使用的命令(命令模式的前缀为 :)。
在 Vim 体内测试。

按行数:

  • Num dd-将从当前光标位置开始向下删除 Num行(例如,5dd将删除当前行和它下面的4行 = > 删除当前行及其下的(< em > num-1 )行)
  • Num dk-将从当前行和当前行本身向上删除 Num行(例如,3dk将删除当前行和当前行上面的3行 = > < strong > 删除当前行和当前行上面的 Num行 )

按行号:

  • dNumG-将删除从当前行(包含)到行号 Num(包含)的行 (例如,如果光标当前在第5行 d2G将删除2-5行(包含))
  • dNumgg-将删除从当前行(包含)到行号 Num(包含)的 行(例如,如果光标当前在第2行 d6gg将删除第2-6行)
  • (只能使用命令模式) :号码1,二号d-将删除行号 行号 号码1(包含)降至行号 二号(包含) 。注意: 如果 号码1大于 二号ー vim 将与 Backwards range given, OK to swap (y/n)?反应

是 dxd 不是 ddx

如果要删除5行,光标到第一行的开头要删除和 d5d

要删除所有行,请使用-ESC gg dG 为了删除几行,让我们说5然后使用 ESC 5dd

  1. Esc 退出插入模式
  2. :1enter 转到第1行(用您感兴趣的行替换’1’)
  3. 5dd 删除5行(从当前行中)

键入 :set number < em > (用于编号行)。