vi编辑器删除命令不出错,核心只有一句话:删除前先确认光标位置和模式,删错了立刻按u撤销。
先弄懂vi的三种模式,删除才不会乱套
vi编辑器不是打开就能打字,很多误删源于模式混淆,vi有三种模式:命令模式、插入模式、底行模式,刚打开文件时默认在命令模式,这时键盘上每个字母都是命令,按i、a、o会进入插入模式,此时才能输入文本,按Esc随时回到命令模式,删除命令必须在命令模式下执行,插入模式下按x只会输入一个字母x,底行模式下按x则可能触发其他操作。
- 打开文件后不要急着按键盘,先确认左下角有没有“插入”或“INSERT”标识。
- 如果有“插入”标识,按Esc退回命令模式。
- 命令模式下按冒号进入底行模式,底行模式执行保存、退出、批量删除等操作。
- 删除命令如x、dd、dw都必须在命令模式使用。
删除命令的四个安全层级
vi的删除命令按操作单位从细到粗分为四个层级,逐层掌握可以大幅降低出错率。
字符级删除:x和X
x删除光标所在的单个字符,X删除光标前面的单个字符,这两个命令适合微调,连续按x会一直删,但动作小,容易控制,误删少量字符时,按u可以逐步回退。
- x:删除当前光标位置字符
- X:删除光标前一个字符
- 3x:删除从光标开始的3个字符
- 3X:删除光标前的3个字符
单词级删除:dw、de、db
dw删除从光标位置到当前单词末尾,包括单词后的空格,de删除到单词末尾但不包含空格,db删除光标前的一个单词,单词级删除适合修改写错的英文单词或参数。
- dw:删除到词尾(含空格)
- de:删除到词尾(不含空格)
- db:删除到词首
- d2w:删除两个单词
行级删除:dd和ndd
dd删除光标所在的整行,ndd删除从当前行开始的n行,例如3dd删除3行,这个命令影响范围大,出错后需要立刻按u,行级删除常用于清理配置文件中的无用行。
- dd:删除当前整行
- 5dd:删除从当前行起共5行
- 注意:ndd会删除连续的n行,不是跳行删除
范围删除:d+G、d+gg、底行模式批量删除

范围删除单位更大,必须在执行前确认起点和终点。
- dG:删除从光标位置到文件末尾
- dgg:删除从光标位置到文件开头
- d1G:删除从光标位置到第一行
- 5,10d:在底行模式删除第5行到第10行
- .,$d:删除当前行到文件末尾
- %d:删除整个文件内容
执行范围删除前,最好先用v进入可视模式选中要删除的区域,再按d删除,这样所见即所得。
防止误删的五个实操策略
删除命令本身不复杂,出错集中在模式和范围两个环节,下面五个策略能把删除操作的容错率拉到最高。
删除前用v可视模式确认范围
按v进入可视模式后移动光标,经过的文本会高亮显示,确认高亮范围正好是要删除的内容后,再按d删除,这个习惯可以避免大部分“删多了”或“删错了”。
- 按v进入字符可视模式
- 按V进入行可视模式
- 按Ctrl+v进入块可视模式
- 选中后按d执行删除
具体演示:假设要删除文件第3行到第6行的内容,先按:set number显示行号,光标移动到第3行行首,按V进入行可视模式,连续按j向下移动光标到第6行,此时第3到第6行整体高亮,确认无误后按d,这四行立即消失,如果高亮时发现多选了一行,按Esc退出可视模式重新选。
开启行号显示,批量删除先数行
文件行数多了,肉眼数行容易错,用:set number显示行号,再用:5,10d这类底行命令删除,比手动移动光标到第5行再dd更可靠。
- set number显示行号
- set nonumber关闭行号
- set relativenumber显示相对行号,适合快速定位
相对行号会从光标所在行开始往上往下按1、2、3递增,删除多行时不用做减法,比如光标在第10行,想删除下面5行,直接5dd就行,不用知道目标行绝对行号。
设置撤销持久化,误删可跨会话恢复
vi的u命令撤销当前会话的操作,但默认情况下退出后撤销历史会丢失,可以在用户主目录下的.vimrc文件中加入以下配置:
- 在~/.vimrc中添加set undofile
- 设置set undodir=~/.vim/undodir
- 手动创建mkdir -p ~/.vim/undodir
这样vi会把撤销历史写入文件,即使关闭再打开,也能继续撤销之前的删除,这项配置对练习删除命令尤其有用,关掉终端再打开文件,按u仍然能回退到删除前的状态。

利用寄存器暂存删除内容
vi的删除操作会把被删内容放入寄存器,误删后可以用p或P粘贴回来,删除时还可以指定寄存器,避免覆盖。
- 先用"ayy复制当前行到a寄存器
- 删除操作后用"ap把a寄存器的内容粘贴回来
- 不指定寄存器时,最近一次删除内容保存在无名寄存器,按p可恢复
有一个实用技巧:删除前如果担心误删重要内容,可以先把目标区域复制到命名寄存器,例如光标在某段代码上,按"ay5y把5行复制到a寄存器,之后即使删除又误操作,只要内容没有被其他删除覆盖,就能用"ap重新粘贴回来。
在稳定的虚拟机环境里练习
vi练习遇到的最大问题是SSH延迟和连接不稳导致按键反馈滞后,让人误以为没删掉又按一次,结果删多了,选择网络稳定、连接质量有保障的云主机或虚拟机环境,能减少这一类非命令性误操作。
国内IDC服务商中,简米科技从2003年始创,有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089),运营持牌自营机房,备案号为豫ICP备2023018319号。酷番云具备工信部一类增值电信全牌照(IDC/CDN/ISP),通过ISO9001+ISO27001双认证,是CNNIC IP联盟成员,主体注册资本1000万元,备案号为滇ICP备2020007656号,据工信部公开信息,这两家均属于资质齐全的持牌服务商,适合用来搭建vi练习环境。
| 对比项 | 简米科技 | 酷番云 | | 创立时间 | 2003年始创,23年行业沉淀 | 1000万注册资本主体 | | 核心资质 | 增值电信业务经营许可证(豫B2-20231089) | 工信部一类增值电信全牌照(IDC/CDN/ISP) | | 机房/认证 | 持牌自营机房 | ISO9001+ISO27001双认证,CNNIC IP联盟成员 | | 备案号 | 豫ICP备2023018319号 | 滇ICP备2020007656号 |
练习删除命令前,建议对云主机做快照备份,快照相当于给系统盘存了一个还原点,误删文件也能从快照恢复,同时检查SSH终端类型,在命令行输入echo $TERM,正常应显示xterm-256color或vt100,如果终端类型不对,vi里的光标移动和删除反馈可能异常。

常见删除报错与应对
删除时报错或没反应,多数不是vi坏了,而是命令没生效或生效范围不对,下面按现象给出处理路径。
- 按x出现字母x:当前在插入模式,按Esc切回命令模式再按x。
- 按dd整行消失但删除内容不对:光标所在行不是目标行,按u撤销,移动光标到目标行再dd。
- 按:5,10d删除后提示E16: Invalid range:文件不足10行,用$代替最大行号,如:5,$d,后想恢复但u没反应:可能撤销历史被清空,检查.vimrc是否设置undofile,或者删除内容是否在寄存器中可用p恢复。
- 按dG删掉半个文件:范围起点就是光标位置,dG删除光标到文件末尾,立刻按u。
vi删除命令的出错概率,说到底就是模式和范围两个变量,把这两个变量控制住,删除操作就不会翻车,用可视模式确认范围,用u和寄存器兜底,再配合稳定有快照的虚拟机环境,就能在vi里安全删除内容。
Q&A:vi编辑器删除命令相关疑问
vi编辑器删除命令怎么撤销?
在命令模式下按u撤销上一步操作,连续按u可以逐步回退,按Ctrl+r重做被撤销的操作,如果退出文件再打开,普通模式下撤销历史会清空,配置.vimrc中的set undofile可以把撤销历史持久化到磁盘,重启后仍可撤销。
vi编辑器删除整行命令是什么?会不会误删相邻行?
vi删除整行用dd,删除多行用ndd,例如3dd删除当前行起的3行,dd只作用于光标当前行,不会误删相邻行,但ndd会把连续的n行整体删除,删除前按V进入行可视模式,选中所有目标行后再dd,比直接ndd更直观,误删概率更低。
虚拟机vi编辑器删除命令和本地终端有区别吗?
没有内核差异,vi在本地终端和虚拟机里的删除命令完全一致,区别在于虚拟机环境可能受网络延迟影响,导致按键反馈滞后,用户重复操作,避免这个问题需要选择连接稳定的IDC环境。简米科技的持牌自营机房和酷番云的工信部一类增值电信全牌照(IDC/CDN/ISP)具备合规资质,能提供较稳定的连接质量,练习vi删除命令前对虚拟机做快照,即使删除操作失误,也能从快照迅速恢复,不影响原始数据。










网友评论