最直观可靠的方式是可视行模式(v)选中后删除,关键在于精准选择:v进入整行可视模式,j/k选行,d删除;误操作按esc退出更安全。

用可视行模式选中再删,最直观可靠
这是新手最容易上手、也最不容易误操作的方式。关键不是“怎么删”,而是“怎么选得准”——Vim 的可视模式(Visual Line Mode)专为整行操作设计,不会切到中间断掉。
操作步骤很简单:gg 跳到开头(可选),V 进入可视行模式(注意是大写 V,不是 v),然后用 j 或 k 向下/向上选中目标行,最后按 d 删除。选中的行会高亮显示,确认无误再按 d。
-
V和v容易混淆:前者选整行,后者选字符级区域;批量删多行必须用V - 如果误选了太多,按
Esc退出可视模式重来,比u撤销更安全(尤其删完已写入) - 选中后别乱按方向键或插入字符,否则可能触发意外粘贴或覆盖
:1,10d 这类地址范围命令,适合已知行号的场景
当你清楚要删哪几行(比如日志里第 42–48 行全是调试输出),直接输命令最快,不依赖光标位置,也不怕手滑选错。
语法是 :[start],[end]d,其中 . 表示当前行,$ 表示末行,% 表示全部。例如::5,12d 删第 5 到 12 行;:.,+3d 删当前行及后面 3 行;:.,$d 删当前行到文件尾。
-
:1,$d和:%d功能等价,但后者少敲两个字符,也更符合 Vim 习惯 - 执行前建议先用
:1,10p预览范围(p是 print),避免删错 - 如果行号记不清,可用
:set number显示行号,删完再:set nonumber关掉
用 :g/pattern/d 按内容批量删,适合结构化文本
当你要删的行有共同特征(比如全是注释、全是空行、都含 DEBUG),靠行号或手动选太慢,正则匹配才是高效解法。
:g/^#/d 删所有以 # 开头的行;:g/^$/d 删纯空行;:g/^\s*$/d 连带删只含空格或 Tab 的“伪空行”。注意 g 是全局(global),v 是反向(invert),所以 :v/ERROR/d 会留下含 ERROR 的行,其余全删。
- 模式里特殊字符要转义,比如删含
.的行,得写:g/\./d,不然.会被当通配符 - 不确定正则是否匹配准确?先用
/pattern搜索验证,再换:g/pattern/d - 删之前务必
:w保存,这类命令不可视、不提示,一回车就生效
列模式(Ctrl+v)删多行特定列,别用错场景
列模式不是用来删“多行”,而是删“多行同一列位置”的内容,比如 CSV 文件里每行第 3 列的 ID、Python 代码前统一删掉 4 个空格缩进。它本质是矩形擦除,不是行级操作。
操作是:光标定位到左上角,Ctrl+v 进入列模式,j/k + l/h 拉出矩形框,按 d 删除框内所有字符。删完光标停在左上角原位,不影响其他行结构。
- 千万别用列模式去删整行——它只会删你框住的那几列,其余内容还在,容易留残缺行
- 列模式下按
I可批量插入(比如给多行开头加#),但插入后要按Esc才真正应用到所有行 - 终端对
Ctrl+v有时会拦截(尤其 SSH 连接),可改用Ctrl+q或检查终端设置
真正容易被忽略的是:没有“撤销远程删除”这回事。一旦 :g/xxx/d 执行完又 :wq 保存,就真的没了。哪怕你记得行号、记得模式,也没法从历史里捞回来——Vim 不存命令级 undo。所以删前 :w 备份、删后 :q! 中止,比什么都重要。











