Skip to content
On this page

13 Vim 替换文本

反复无常,人生、需求、字符串或者变量名。

s (substitute) 命令用来替换字符串

:[作用范围]s/{目标字符串/正则}/{替换字符串}/[替换标志]

例如

:%s/foo/bar/g 会在全局范围 % 中查找 foo 替换为 bar,所有出现都会被替换 g

注意

:s/foo/bar/g ,没有说明范围,默认只会替换 当前行的所有 foobar

作用范围

作用范围分为(默认)当前行、全文、选区等

1. 当前行

默认只修改当前行

:s/oldStr/newStr/g

2. 全文

这个相对最常用

:%s/oldStr/newStr/g

3. 选中的区域

在 Visual 模式下选择区域后输入 : ,Vim 自动补全为 :'<,'>

text
:'<,'>s/oldStr/newStr/g

4. 指定行

5-12行

text
:5,12s/oldStr/newStr/g

当前行 . 与接下来两行 +2

text
:.,+2s/oldStr/newStr/g

$ 表示匹配到页面尾部,替换从 12 行到页面尾部出现的 oldStr

text
:12,$s/oldStr/newStr/g

替换标志符

上面的命令结尾都带有 g,表示全局 global 替换,即替换所有目标字符串,这个是最常用的 flag 替换标志符。

如果无替换标志,只替换从光标位置开始的第一次出现。

i 表示大小写不敏感查找,I 表示大小写敏感:

:%s/oldStr/newStr/i
# 等效于模式中的 \c 不敏感,\C 敏感
:%s/oldStr\c/newStr

c 表示需要确认,例如全局查找 oldStr 替换为 newStr 并且需要确认:

:%s/oldStr/newStr/gc

回车后 vim 会将光标移动到每个 oldStr 出现的位置,并且弹出提示

replace with newStr (y/n/a/q/l/^E/^Y)?

按下 y 表示替换,n 表示不替换,a 表示替换所有,q 表示退出查找模式,l 表示替换当前的位置并退出。后面两个是屏幕向下和向上滚动。

多次选中单词

gb 类似 vscode 中 cmd+d 多次选中单词,修改视线范围内的变量十分有用 ,然后配合 cw 修改。