关于regex:vim中的字符串替换:为什么%s/foo/bar工作?

String replace in vim: Why does %s/foo/bar work?

本问题已经有最佳答案,请猛点这里访问。

:%s/foo/bar/g

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

:%s/foo/bar没有全球(g)结束,它仍然有效!我很困惑。发生什么事?使用/g更好吗?为什么?


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

%s/foo/bar为每条线路运行s/foo/bar。这用bar取代了foo的第一个实例。

假设您的文件包含

1
2
3
foo foo foo
foo foo foo
foo foo foo

然后%s/foo/bar/g把它变成

1
2
3
bar bar bar
bar bar bar
bar bar bar

但是%s/foo/bar把它变成了

1
2
3
bar foo foo
bar foo foo
bar foo foo

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