vi 命令是 Linux 和 Unix 系统中广泛使用的文本编辑器,其强大的编辑功能使其成为系统管理员和开发者的常用工具,在文本编辑过程中,删除一行是一个常见的操作,掌握多种删除一行的方法能够提高编辑效率,下面将详细介绍 vi 命令中删除一行的各种方式、相关操作技巧以及注意事项。

基本删除一行命令
在 vi 命令的正常模式(Normal Mode)下,删除一行最直接的方法是使用 dd 命令,正常模式是 vi 的默认模式,启动 vi 后首先进入的就是正常模式,当光标位于某一行时,按下 d 键两次,即可删除光标所在行的整行内容,删除后,后面的行会自动上移填补空缺,光标停留在原行的位置(即被删除行后的新行),如果当前光标在第 5 行,执行 dd 后,第 5 行被删除,原第 6 行变为第 5 行,光标位于新的第 5 行开头。
结合数字的批量删除
如果需要一次性删除多行,可以在 dd 命令前加上数字前缀,数字前缀表示删除从当前行开始的指定行数,光标在第 3 行,输入 5dd,则会删除从第 3 行开始的连续 5 行,即删除第 3、4、5、6、7 行,原第 8 行变为第 3 行,光标位于新的第 3 行开头,这种方法在需要删除大块连续文本时非常高效,避免了逐行删除的繁琐操作,需要注意的是,数字前缀必须紧跟在 d 键之前,中间不能有空格,否则 vi 会将数字当作普通字符处理。
指定范围的删除
除了使用数字前缀批量删除,还可以通过指定行号范围来删除特定的行,首先需要进入 vi 的命令行模式(Command-Line Mode),在正常模式下输入 冒号即可进入命令行模式,在命令行模式下,可以使用 start,endd 的格式删除从 start 行到 end 行的内容。1,10d 表示删除第 1 行到第 10 行的所有内容,删除后,后面的行会上移,光标位于第 1 行的位置(如果删除的行包含当前光标所在行),如果需要删除到文件的末尾,可以使用 符号表示最后一行,5,$d 表示删除从第 5 行到文件末尾的所有行,如果需要删除从当前行到末尾的行,可以省略起始行号,直接使用 ,$d,或者简写为 d(在某些 vi 版本中可能需要明确范围)。
可视模式下的删除
vi 的可视模式(Visual Mode)提供了一种直观的文本选择方式,通过选择要删除的行范围来执行删除操作,首先从正常模式进入可视模式,可以通过以下按键实现:

- 按
V(大写)进入行可视模式(Line-wise Visual Mode),此时可以选择连续的行; - 按
v进入字符可视模式(Character-wise Visual Mode),可以选择连续的字符; - 按
Ctrl+v进入块可视模式(Block-wise Visual Mode),可以选择矩形块的文本。
如果需要删除整行,通常使用行可视模式,在正常模式下按下 V,当前行会被高亮显示,然后可以通过上下方向键选择需要删除的多行,选中的行会持续高亮,选择完成后,按下 d 键即可删除所有选中的行,这种方法适合不确定具体行号,但可以通过光标移动来选择行范围的情况,操作更加直观灵活。
删除并进入插入模式
有时候在删除一行后需要立即在该位置插入新内容,vi 提供了相应的快捷方式,在正常模式下,使用 cc 命令可以删除当前行并进入插入模式,相当于先执行 dd 再执行 i(插入)命令,光标在第 4 行,按下 cc,第 4 行被删除,光标位于空行的开头,此时可以直接输入新内容,类似地,如果需要删除多行并进入插入模式,可以在 cc 前加上数字前缀,如 3cc 表示删除当前行及接下来的 2 行(共 3 行),然后进入插入模式,这种方法适用于需要替换整行或多行内容的情况,减少了切换模式的次数。
恢复被删除的行
vi 命令提供了撤销操作,如果误删了一行或多行,可以通过撤销命令来恢复,在正常模式下,输入 u(小写)可以撤销上一次的操作,包括删除操作,执行 dd 删除一行后,按下 u,被删除的行会重新出现在原来的位置,如果需要恢复多次操作,可以连续按 u,vi 会按照操作的逆序逐步恢复,vi 还支持重做操作,在撤销后如果需要恢复到撤销前的状态,可以输入 Ctrl+r,需要注意的是,撤销和重做功能只能恢复最近的操作,对于已经保存并退出的文件,无法通过撤销恢复删除的内容。
删除行的注意事项
在使用 vi 命令删除行时,需要注意以下几点:

- 确认操作范围:在使用
dd或数字前缀删除时,确保光标位于正确的行上,避免误删不需要的内容,在删除大量行之前,建议先检查光标位置和行号。 - 保存操作:vi 的删除操作在未保存时可以通过
u撤销,但如果已经执行了w(保存)命令,删除操作将无法撤销,在删除重要内容前,建议先保存文件副本或确认删除操作的正确性。 - 模式切换:确保当前处于正常模式下再执行删除命令,如果在插入模式下按
d键,vi 会将d作为普通字符插入,而不是执行删除操作。 - 大文件处理:对于非常大的文件,使用
dd或数字前缀删除大量行可能会导致 vi 响应变慢,此时可以考虑分批删除或使用其他工具(如 sed)处理。
删除行与其他编辑命令的结合
vi 的强大之处在于命令的组合使用,删除行可以与其他命令结合实现更复杂的编辑功能。
- 删除并复制:在正常模式下,使用
dd删除一行后,可以使用p(小写)在当前行下方粘贴被删除的内容,或使用P(大写)在当前行上方粘贴,如果需要复制而不删除,可以使用yy命令复制当前行,然后使用p或P粘贴。 - 删除并移动:使用
dd删除一行后,可以移动光标到其他位置,然后使用p或P将删除的行移动到新位置,这种方法相当于实现了行的剪切和粘贴功能。 - 与查找命令结合:首先使用 命令查找包含特定内容的行,将光标定位到目标行后,执行
dd删除该行。/keyword查找包含 "keyword" 的行,光标定位到该行后,按下dd删除。
不同 vi 版本的差异
不同的 vi 版本(如 vi、vim、nvi 等)在删除行的功能上基本一致,但可能存在一些细微差异,vim(Vi IMproved)作为 vi 的增强版,支持更多的命令和功能,如可视模式下的块删除、撤销列表等,在使用特定版本的 vi 时,可以通过 help 命令查看帮助文档,了解该版本特有的命令和选项,在 vim 中,可以使用 help dd 查看 dd 命令的详细说明和扩展功能。
删除行的练习方法
熟练掌握 vi 命令删除行的最佳方法是多加练习,可以通过以下方式提高操作熟练度:
- 创建测试文件:创建一个包含多行文本的文件,使用不同的删除命令进行练习,如
dd、5dd、1,5d、V选择删除等。 - 模拟实际场景:模拟实际编辑任务,如删除注释行、删除重复行、删除空行等,练习使用不同的删除方法。
- 尝试快捷键组合:练习删除行与其他命令的组合,如
dd+p、cc、u等,熟悉命令的联动效果。 - 参考教程和文档:阅读 vi/vim 的教程和官方文档,学习高级技巧和最佳实践,提高编辑效率。
相关问答 FAQs
问题 1:在 vi 中如何删除从当前行到文件末尾的所有行?
解答:在 vi 的正常模式下,可以通过以下两种方式删除从当前行到文件末尾的所有行:
- 使用命令行模式:按下 进入命令行模式,输入
,$d并按回车, 表示文件末尾,,$d表示从当前行到末尾删除。 - 使用数字前缀:如果当前行是第
n行,且文件总行数为N,可以输入(N-n+1)dd,例如当前行是第 3 行,文件共 10 行,输入8dd即可删除从第 3 行到第 10 行的所有行,但这种方法需要知道总行数,不如第一种方法便捷。
问题 2:在 vi 中误删了一行,如何快速恢复?
解答:在 vi 的正常模式下,可以使用撤销命令 u(小写)快速恢复被删除的行,具体操作如下:
- 执行删除操作(如
dd)后,立即按下u键,vi 会撤销上一次的删除操作,被删除的行会重新出现在原来的位置。 - 如果需要恢复多次删除操作,可以连续按
u,vi 会按照操作的逆序逐步恢复。 - 如果撤销后需要恢复到撤销前的状态(即重做),可以按下
Ctrl+r键。
需要注意的是,撤销功能只能在未保存文件时有效,如果已经执行了w保存命令,则无法通过撤销恢复删除的内容。
