在vim中替换字符串:为什么%s / foo / bar有效?

时间:2018-02-24 18:16:05

标签: regex vi

:%s/foo/bar/g

这个vim命令为我节省了很多时间。但是今天我不小心输入了

:%s/foo/bar没有全局(g)结尾,无论如何都有效!我很困惑。发生了什么事?是否更好地使用/g以及为什么?

2 个答案:

答案 0 :(得分:2)

即使您没有指定/ g它也能正常工作,但它只替换第一次出现的匹配而不是文件中的第二次和连续出现。

答案 1 :(得分:2)

%s/foo/bar/g为每一行运行s/foo/bar/g。这将foo替换bar的所有实例。

%s/foo/bar为每一行运行s/foo/bar。这会将foo的第一个实例替换为bar

假设您的文件包含

foo foo foo
foo foo foo
foo foo foo

然后%s/foo/bar/g将其变为

bar bar bar
bar bar bar
bar bar bar

%s/foo/bar将其变为

bar foo foo
bar foo foo
bar foo foo