如何在vi中删除多行?

Posted

技术标签:

【中文标题】如何在vi中删除多行?【英文标题】:How can I delete multiple lines in vi? 【发布时间】:2013-04-01 12:40:35 【问题描述】:

我已尝试遵循以下内容:

How to delete selected text in VI editor

但是

5dd

给予

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

然后我尝试了:

5d

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

【问题讨论】:

据我记得,5dd 应该是有效的语法,应该删除从光标所在行开始的 5 行。是否有可能打开 CAPS LOCK 并且您使用的键盘布局会导致数字键在打开时移动? 【参考方案1】:
    Esc 退出插入模式 :1enter 转到第 1 行(将 '1' 替换为您感兴趣的行) 5dd 删除5行(从当前行开始)

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

我不认为它以冒号开头。 @PoeteMaudit 这些是有效的 vi 命令。冒号使 vi 将光标移动到屏幕底部并接受行编辑器命令。【参考方案3】:

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

按行数:

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

按行号:

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

【讨论】:

这对我有帮助,因为我没有意识到 num 'd' 'd' 试图删除光标下方。我将光标放在文件底部,试图删除光标上方的行!感谢您的帮助! 按行号删除:':,$d' 会一直删除到文件末尾。【参考方案4】:

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

【讨论】:

【参考方案5】:

是 dxd,不是 ddx

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

【讨论】:

【参考方案6】:

如果您更喜欢非可视模式方法并确认行号,我想建议您另一种直接的方法。

例子

我想删除第 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       |
+---------+----------+--------------------+

【讨论】:

【参考方案7】:

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

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

每次遇到^TMPDIR 后删除 11 行(含)。

【讨论】:

【参考方案8】:

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

:[start_line_no],[end_line_no]d

注意:d代表删除

在哪里, start_line_no 是您要删除的起始行号,并且 end_line_no 是要删除的结束行号。 start 和 end 之间的线,包括 start 和 end 将被删除。

例如:

:45,101d

45 到 101 之间的行,包括 45 和 101 将被删除。

【讨论】:

您也可以使用$ 来表示文件中的最后一行。所以:45,$d 会删除从 45 到结尾的每一行。 你甚至可以使用像/&lt;\/div&gt;/这样的模式 如果你想从你当前所在的 lne 开始你可以做:.,[end_line_no]d【参考方案9】:

d5d“删减”五行

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

d7l = 删除 7 个字母

【讨论】:

【参考方案10】:

我觉得这更容易

    进入视觉模式 Shift+v 选择行 d 删除

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

【讨论】:

【参考方案11】:

听起来您是在命令模式(又名“Ex 模式”)下输入命令。在那种情况下,:5d 将删除第 5 行,仅此而已。要使5dd 按预期工作——也就是说,删除从光标开始的五个后续行——在正常模式下输入它,并且不要在命令前加上:

【讨论】:

以上是关于如何在vi中删除多行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vi/Vim 中的多行选择的开头插入文本

linux 中怎么vi删除多行

vim编辑器如何添加或删除多行注释

Vi编辑器添加删除多行注释

vi删除多行,替换,复制

vim的几种多行注释方法