Vim全局替换核心命令是:%s/old/new/g,其中%表示全文、g确保每行所有匹配均被替换;忽略大小写需加\c标志,路径含/时推荐用#作分隔符或\V模式按字面匹配。

直接用 :%s/old/new/g 就能完成全文批量替换,但跳过确认、忽略大小写、处理特殊字符这三步不注意,很容易替错或漏替。
全局替换命令怎么写才有效
核心是 :%s/old/new/g 这个结构,其中 % 表示整篇文件,g 表示“每行所有匹配都换”,缺了 g 就只换每行第一个。别手快打成 :s/old/new/g——那只会动当前行。
-
:%s/foo/bar/g:全文把foo换成bar -
:10,20s/foo/bar/g:只在第 10 到 20 行操作 -
:.,$s/foo/bar/g:从当前行到末尾 - 想用别的分隔符(比如路径里有
/),改用#或+::%s#/old/path#/new/path#g
大小写不一致时怎么确保全中
Vim 默认区分大小写,Foo、FOO、foo 不会被 :%s/foo/bar/g 一起抓到。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 临时忽略:加
\c标志,如:%s/foo\c/bar/g - 全局开启:先执行
:set ignorecase(或简写:set ic),之后所有查找/替换都忽略大小写 - 注意:如果同时开了
:set smartcase,只有当 pattern 全小写时才忽略大小写;混用容易误判,建议不用smartcase做批量替换
遇到斜杠、点号、星号这些字符怎么安全替换
正则元字符(如 .、*、^、$)在 pattern 位置会触发匹配逻辑,不是字面意思。例如 :%s/a.b/c/g 实际匹配的是 a + 任意单字符 + b,不是字符串 a.b。
- 要按字面替换含元字符的字符串,得转义:
:%s/a\.b/c/g(\.表示真正的点) - 更省事的办法:用
\V开启“very nomagic”模式,让所有字符都当字面量处理::%s/\Va.b/c/g—— 这里a.b就是纯文本 - 路径类替换强烈推荐
\V::%s/\V/usr/local/bin//usr/share/bin//g
为什么替完了发现有些没变,或者报错 E486
E486: Pattern not found 是最常被忽略的提示:它不代表失败,而是说“没找到匹配项”。你可能以为命令没运行,其实是 Vim 忠实执行了——只是原文本里压根没有那个字符串。
- 执行前先用
/old确认是否真有匹配(n多按几次看跳几处) - 替换后用
:noh关掉高亮,避免视觉干扰掩盖漏替 - 对关键配置或代码文件,务必先
:w! backup.txt手动备份,:s命令本身不生成备份 -
gc标志虽慢但最稳妥::%s/old/new/gc,每个替换点都会停住问y/n/a/q,适合不确定 pattern 是否精准时
真正麻烦的不是命令记不住,而是 pattern 写得太“聪明”——加了不该加的元字符,或忘了 \V 和 \c 的作用边界。动手前花十秒验证匹配范围,比替完再 grep 回滚快得多。

















