如何在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' 试图删除光标下方。我将光标放在文件底部,试图删除光标上方的行!感谢您的帮助! 按行号删除:':删除所有行使用 - 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 到结尾的每一行。
你甚至可以使用像/<\/div>/
这样的模式
如果你想从你当前所在的 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中删除多行?的主要内容,如果未能解决你的问题,请参考以下文章