如何在vi中删除多行?


129

我尝试遵循以下条件:

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

5dd

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

然后,我尝试:

5d

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


2
据我所知,5dd应该是有效的语法,应该删除5行,从光标所在的行开始。CAPS LOCK是否打开,并且您使用的键盘布局会导致数字键移动?
Eric J.

Answers:


132

听起来好像您是在命令模式(即“ Ex模式”)下输入命令。在这种情况下,:5d将删除第5行。为了5dd按预期方式工作-即删除从光标处开始的五个后续行-以普通模式输入它,并且不要在命令前加上:



142

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

:[start_line_no],[end_line_no]d

注意: d代表删除

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

例如:

:45,101d

45和101之间的行(包括45和101)将被删除。


14
您也可以$用来表示文件的最后一行。因此:45,$d,将从45开始的每一行删除到末尾。
freethebees

你甚至可以使用模式,比如/<\/div>/
比约恩

1
如果您想从lne开始您的飞行范围,可以这样做:.,[end_line_no]d
Joe

15

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

按行数:

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

按行号:

  • dnum- 将从当前行(包括)向上G删除行,直到行号num(包括)(例如,如果光标当前位于第5行,d2G则删除第2-5行)
  • dnum- 从当前行(包括下)gg删除到行号num(包括行)的行(例如,如果光标当前位于第2行,d6gg则删除第2-6行)
  • 仅命令模式:num1 ,num2-d将删除行号num1(包括端点)的DOWN到行号num2(包括端点)的行。注意:如果num1大于num2 — vim将与Backwards range given, OK to swap (y/n)?

1
这对我有所帮助,因为我没有意识到num'd''d'试图删除光标下方的内容。我的光标位于文件底部,试图删除光标上方的行!谢谢您的帮助!
Jonathan Chad Faling

按行号删除:':<start>,$ d'将删除到文件末尾。
Devolus

11

如果您更喜欢非可视模式的方法并确认行号,我想向您推荐另一种简单的方法。

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

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

45Gd101G

内容为:

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

请注意,vim您可以使用gg代替G

与@Bonnie Varghese的答案进行比较:

:45,101d[enter]

他的答案上面的命令要求输入9次,包括enter,而我的答案需要输入8-10次。因此,我的方法的速度是可比的。

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

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

8

d5d“削减”五行

我通常只是将数字放在中间,例如:

d7l =删除7个字母


7

Esc键,以确保您不是在编辑模式。将光标放在要删除的第一行上。输入:5dd。当前行和接下来的四行应删除。

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

Esc键,以确保您不是在编辑模式。输入:#,#d“#”代表要删除的开始和结束行号。


我认为一开始它不适用于冒号。
弃儿

@PoeteMaudit这些是有效的vi命令。冒号使vi将光标移动到屏幕底部并接受行编辑器命令。
肯斯特,

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

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



0

它是dxd,而不是ddx

如果要删除5行,请将光标移到要删除的第一行的开头并按d5d



-1

可以按照以下步骤进行。

  1. 将光标置于要删除的位置。
  2. 按“ v”开始视觉选择。
  3. 使用箭头键将光标移至要删除的位置。
  4. 按“ d”将删除这些行。
  5. 现在使用“:x!”保存并退出。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.