如何在vi中删除多行?

del*_*ber 113 vi

我试图遵循以下内容:

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

但

5dd
Run Code Online (Sandbox Code Playgroud)

给

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

然后我尝试了:

5d
Run Code Online (Sandbox Code Playgroud)

这只删除一行.如何删除多行?

KCD*_*KCD 154

我发现这更容易

  1. 去VISUAL模式Shift+v
  2. 选择行
  3. d 删除

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

  • 值得注意的是,这只是vim. (7认同)

Bon*_*ese 123

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

:[start_line_no],[end_line_no]d
Run Code Online (Sandbox Code Playgroud)

注意: d代表删除

其中,
start_line_no是您要删除的起始行,end_line_no是您要删除的结束行.开始和结束之间的行(包括开始和结束)将被删除.

例如:

:45,101d
Run Code Online (Sandbox Code Playgroud)

包括45和101在内的45到101之间的行将被删除.

  • 您也可以使用`$`来表示文件中的最后一行.所以`:45,$ d`将删除从45到结尾的每一行. (10认同)
  • 如果您想从当前所在的行开始范围,可以执行 `:.,[end_line_no]d` (2认同)

unp*_*680 118

听起来像是在命令模式下输入命令(又名"Ex模式").在这种情况下,:5d将删除第5行,没有别的.为了5dd按预期工作 - 也就是说,从光标开始删除五个后续行 - 在正常模式下输入,不要在命令前加上:.


Fil*_* W. 11

列出的命令用于正常模式(前缀:为命令模式).
在Vim测试.

按行数:

  • numdd - 将从当前光标位置删除num lines DOWN开始计数(例如,5dd将删除当前行和其下的4行=> 删除当前行和其下的(num-1)行)
  • numdk - 将从当前行和当前行本身删除num行UP(例如,3dk将删除当前行及其上方的3行=> 删除当前行和当前行上方的num行)

按行号:

  • dnumG - 将删除当前行(包括)中的行UP到行号num(包括)(例如,如果光标当前在第5 d2G行将删除第2-5行)
  • dnumgg - 将从当前行(包括)DOWN到行号num(包括)d6gg删除行(例如,如果光标当前在第2 行将删除第2-6行)
  • (仅限命令模式):num1 ,num2d - 将删除行号num1(包含)DOWN到行号num2(含).注意:如果num1大于num2 - vim将作出反应Backwards range given, OK to swap (y/n)?


小智 8

d5d"削减"五行

我通常只是把数字扔在中间,如:

d7l =删除7个字母


fro*_*hem 8

如果您更喜欢非视觉模式方法并确认行号,我想建议您另一种直截了当的方式.

例

我想删除第45行到第101行的文字.

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

45Gd101G
Run Code Online (Sandbox Code Playgroud)

它写道:

转到第45行(45G),然后d从当前行删除text()到第101行(101G).

请注意,vim您可能会使用gg而不是G.

与@Bonnie Varghese的回答相比较:

:45,101d[enter]
Run Code Online (Sandbox Code Playgroud)

他的答案上面的命令需要9次打字,包括enter,我的答案需要8-10次打字.因此,我的方法的速度是可比的.

就个人而言,我自己更喜欢45Gd101G,:45,101d因为我喜欢坚持vi命令的语法,在这种情况下是:

+---------+----------+--------------------+
| syntax  | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command |   45G    |        d101G       |
+---------+----------+--------------------+
Run Code Online (Sandbox Code Playgroud)


Bri*_*son 7

按Esc键确保您不处于编辑模式.将光标放在要删除的第一行上.输入":5dd".应删除当前行和后四行.

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

按Esc键确保您不处于编辑模式.输入":#,#d",其中"#"代表要删除的起始和结束行号.


JSO*_*C11 5

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

类型 (用于编号的行)。:set number