我发现这个更容易
https://superuser.com/questions/170795/how-can-i-select-and-delete-lines-of-text-in-vi
如果您知道行号,可以删除多行(范围):
:[start_line_no],[end_line_no]d
注意: d 代表删除
其中,
start_line_no 是您想要删除的起始行号,
end_line_no 是您想要删除的结束行号。
在起始行和结束行之间的所有行,包括起始行和结束行,都将被删除。
例如:
:45,101d
将包括第45和101行在内的所有行均会被删除。
$
来表示文件中的最后一行。因此,:45,$d
将删除从第 45 行到结尾的所有行。 - freethebees/<\/div>/
的模式。 - Björn:.,[end_line_no]d
。 - Joe看起来你是在命令模式(也称为"Ex模式")下输入命令。在这种情况下,:5d
将删除第5行,而不会删除其他内容。要让5dd
按预期工作--也就是说,删除光标开始的连续五行--请在正常模式下输入它,并且不要在命令前加上:
。
正常模式下的命令列表(在命令模式下前缀为:)。
在Vim中测试过。
按行数:
按行号:
反向范围给出,请确认是否交换 (y/n)?
如果您更喜欢非视觉模式的方法并且了解行号,我想给您推荐另一种直接的方式。
示例
我想删除从第45行到第101行的文本。
我的方法建议您在命令模式下输入以下命令:
45Gd101G
这段话的意思是:
前往第45行(
45G
),然后删除从当前行到第101行(101G
)的文本内容(d
)。
注意,在vim
中,你可能会使用gg
代替G
。
与@Bonnie Varghese的回答进行比较。
:45,101d[enter]
他回答中的上述命令需要输入9次,包括enter键,而我的答案需要输入8到10次。因此,我的方法的速度是可比较的。
就我个人而言,我更喜欢使用45Gd101G
而不是:45,101d
,因为我喜欢遵循vi命令的语法,例如:
+---------+----------+--------------------+
| syntax | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command | 45G | d101G |
+---------+----------+--------------------+
d5d "cuts" five lines
可以翻译为“d5d删除五行”。我通常只是在中间放入数字,比如:
d7l = 删除七个字母
可以翻译为“d7l删除七个字母”。按下Esc键以确保您不处于编辑模式。
将光标置于要删除的第一行上。
输入:5dd
。
当前行和接下来的四行应该被删除。
或者,如果您已经打开了行号...
按下Esc键以确保您不处于编辑模式。
输入:#,#d
,其中“#”代表要删除的起始行号和结束行号。
输入:set number
(显示行数)。
:g/^TMPDIR/ :.,+11d
每遇到^TMPDIR
后删除其后面11行(包括这一行)。
应该是dxd,而不是ddx
如果你想删除5行,将光标移动到要删除的第一行的开头,然后输入d5d