替换命令
:substitute
公式
:[rang]s/{pattern}/{string}/[flags]
[] 里的内容是可选的
基础用法
替换当前行里的指定字符串
vnode
比如我们想将当前行的 vnode 替换成 haha,可以使用
:s/vnode/haha
注意我们需要按回车确认更改,否则当我们再次切回 normal 模式后还是会回到修改前的字符串
而且当我们使用替换命令的时候编辑器下方会出现对应的替换命令

rang
范围
-
使用
:10,$s/vnode/hhh 替换第十行到最后一行的 vnode 为 hhh - % 全文
使用全文范围替换
vnode
vnode vnode
vnode
比如:我们想替换当前文件下所有的 vnode 就可以使用 %
命令如下:
:%s/vnode/hhh
上面的内容就会变成
hhh
hhh vnode
hhh
- number, number 第几行到第几行
:10,12s/vnode/hhh 替换第10-12行的 vnode 为 hhh
注意:默认情况下所有的范围匹配的都是满足条件行里的第一个匹配的字符串,如果当前行有多个满足条件的字符串,那么除第一个外都不会匹配
比如:
vnode vnode
只会将第一个vnode变成 hhh
如果你想把所有满足条件的字符串都匹配的话就需要使用 flag 里的 g
pattern
模式
匹配要替换的字符串,可以是正则表达式
比如:
h1aha
h2aha
我们想将上面的两行统一替换为 hhh,这时我们就需要用正则匹配1和2
:%s/h[1,2]aha/hhh
string
要替换成的字符串
flag
- g
匹配满足条件所有字符串
比如:
vnode
vnode vnode
使用命令 :%s/vnode/hhh/g
就会变成
hhh
hhh hhh
- c
弹出对话框提示来进一步确认我们要替换的项,确认后无需再按回车
比如:
:%s/vnode/hhh/gc 执行后如下

会有五个选项
y: 替换当前光标高亮的那个字符串
n: 当前光标高亮的这个不替换
a: 把所有匹配的都替换
q: 退出
l: 把当前光标高亮的这个替换然后退出
- g 和 c 可以同时使用
可视化模式下
无需使用范围
当我们使用可视化模式选中一个区域后再按冒号,它会自动帮我们生成一个'<,'>的范围,也就是我们选中的区域的开始和结尾
比如:
:s/vnode/hhh
就会自动变成
:'<,'>s/vnode/hhh
查看更多替换命令
打开终端
在终端里输入 vim
然后 输入 :help s_flags 回车
多选操作
- gb
使用 gb 选中一个字符串,然后再按一次 gb 匹配相同字符串
使用场景:对同一字符串进行批量修改
test
test
gb gb c hhh
将两个 test 改为 hhh
网友评论