32

假设我有一个包含单词redand的文本blue

如何仅在包含该单词的所有行blue中用该单词替换该单词的出现?greenred

同样,我如何在所有不包含单词的行中blue替换为?greenred

4

2 回答 2

57

要将包含“red”的行中的“blue”替换为“green”:

:g/red/s/blue/green

要在不包含“red”的行中进行替换:

:g!/red/s/blue/green
于 2012-08-17T17:26:55.113 回答
5

使用模式匹配地址

就像在 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”的行保持不变。

于 2012-08-17T17:35:47.457 回答