「vim 中如何替换」
1. 最常用的几条命令
在 Vim 里,替换命令的基本格式是:
vim
:[范围]s/原内容/新内容/[标志]
1) 当前行替换
vim
:s/foo/bar/ " 当前行,将第一个 foo 换成 bar
:s/foo/bar/g " 当前行,将所有 foo 换成 bar
2) 整个文件替换
vim
:%s/foo/bar/g " 全文所有 foo 换成 bar
:%s/foo/bar/gc " 全文替换,逐个确认(y 是替换,n 跳过)
3) 指定行范围替换
vim
:3,10s/foo/bar/g " 第 3 行到第 10 行之间替换
:.,$s/foo/bar/g " 当前行到文件末尾替换
:.,+4s/foo/bar/g " 当前行和之后 4 行里替换
2. 常用标志说明
放在命令最后的 /[标志] 部分:
| 标志 | 含义 | 示例 |
|---|---|---|
| g | 一行中全部匹配 | :%s/foo/bar/g |
| c | 每次替换前确认 | :%s/foo/bar/gc |
| i | 忽略大小写 | :%s/foo/bar/gi |
| I | 强制大小写敏感 | :%s/foo/bar/gI |
| e | 没有匹配不报错 | :%s/foo/bar/ge |
3. 只替换完整单词(不替换子串)
比如只想把独立单词 foo 换成 bar,而不影响 foobar:
vim
:%s/\<foo\>/bar/g
\<表示单词开始\>表示单词结束
4. 一些非常实用的小技巧
1) 替换前确认
vim
:%s/foo/bar/gc
每个匹配都会问你:replace with bar (y/n/a/q/l/^E/^Y)?
- y:替换当前
- n:跳过当前
- a:替换后面全部
- q:退出
- l:只替换这一处后退出
2) 在可视选区内替换
-
在普通模式按
V或v选中一段文本 -
按
:,命令行会自动出现:'<,'> -
输入替换命令,例如:
vim:'<,'>s/foo/bar/g
只会在选中的区域里替换。
3) 删除匹配的文本
vim
:%s/foo//g " 删除全文中所有 foo
:s/foo//g " 删除当前行所有 foo
4) 去掉多余空格(典型格式化操作)
vim
:%s/\s\+/ /g " 多个空白变成一个空格
:%s/\s\+$//e " 删除每行行尾空白
5. 最小速查表
vim
:s/a/b/ " 当前行第一个 a -> b
:s/a/b/g " 当前行所有 a -> b
:%s/a/b/g " 全文所有 a -> b
:%s/a/b/gc " 全文替换,逐个确认
:3,10s/a/b/g " 第 3~10 行的 a -> b
:%s/\<a\>/b/g " 只替换独立单词 a -> b