vim 中的字符串替换:为什么 %s/foo/bar 有效?
String replace in vim: Why does %s/foo/bar work?
:%s/foo/bar/g
这个vim 命令为我节省了很多时间。但是今天我不小心输入了
:%s/foo/bar
没有全局 (g) 结尾,但它仍然有效!我很困惑。这是怎么回事?使用 /g
更好吗?为什么?
即使您不指定 /g,它也能正常工作,但它只会替换文件中第一次出现的匹配项,而不是第二次和连续出现的匹配项。
%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
:%s/foo/bar/g
这个vim 命令为我节省了很多时间。但是今天我不小心输入了
:%s/foo/bar
没有全局 (g) 结尾,但它仍然有效!我很困惑。这是怎么回事?使用 /g
更好吗?为什么?
即使您不指定 /g,它也能正常工作,但它只会替换文件中第一次出现的匹配项,而不是第二次和连续出现的匹配项。
%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