假设我有一个包含单词red
and的文本blue
。
如何仅在包含该单词的所有行blue
中用该单词替换该单词的出现?green
red
同样,我如何在所有不包含单词的行中blue
替换为?green
red
要将包含“red”的行中的“blue”替换为“green”:
:g/red/s/blue/green
要在不包含“red”的行中进行替换:
:g!/red/s/blue/green
就像在 sed 中一样,您可以对要操作的地址使用模式。例如,给定以下文件:
foo bar
bar
foo bar baz
bar baz
quux bar
您将发出如下命令:
:g/^foo/s/bar/foobarbaz/g
这将告诉 Vim 仅将模式匹配应用到以 "foo" 开头的每一行,并在每个匹配行中的多个匹配上执行替换。因此,即使“bar”出现在多行,通过此调用,您最终将得到以下输出:
foo foobarbaz
bar
foo foobarbaz baz
bar baz
quux bar
请注意,仅匹配行首以“foo”开头的行,因此其他行带有“bar”的行保持不变。