13 Vim 替换文本
反复无常,人生、需求、字符串或者变量名。
s
(substitute) 命令用来替换字符串
:[作用范围]s/{目标字符串/正则}/{替换字符串}/[替换标志]
例如
:%s/foo/bar/g
会在全局范围 %
中查找 foo
替换为 bar
,所有出现都会被替换 g
注意
:s/foo/bar/g
,没有说明范围,默认只会替换 当前行的所有 foo
为 bar
作用范围
作用范围分为(默认)当前行、全文、选区等
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
修改。