Answers:
听起来好像您是在命令模式(即“ Ex模式”)下输入命令。在这种情况下,:5d
将删除第5行。为了5dd
按预期方式工作-即删除从光标处开始的五个后续行-以普通模式输入它,并且不要在命令前加上:
。
我觉得这更容易
/superuser/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和101)将被删除。
$
用来表示文件的最后一行。因此:45,$d
,将从45开始的每一行删除到末尾。
/<\/div>/
:.,[end_line_no]d
列出了在正常模式下使用:的命令(命令模式的前缀)。
在Vim中测试。
按行数:
按行号:
Backwards range given, OK to swap (y/n)?
如果您更喜欢非可视模式的方法并确认行号,我想向您推荐另一种简单的方法。
例
我想将文本从第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 |
+---------+----------+--------------------+
如果要在特定行触发后删除范围,可以使用类似以下的内容
:g/^TMPDIR/ :.,+11d
每次遇到时,都会删除11行(包括11行)^TMPDIR
。
要删除所有行,请使用-ESC gg dG要删除几行,请说5然后使用ESC 5dd