说我有一个包含red
和blue
字样的文字。
如何仅在包含单词blue
的所有行中用单词green
替换单词red
的出现?
同样,如何在不包含单词blue
的所有行中将green
替换为red
?
答案 0 :(得分:45)
替换" blue"与"绿色"在包含" red":
的行中:g/red/s/blue/green
在不包含" red":
的行中进行替换:g!/red/s/blue/green
答案 1 :(得分:3)
就像在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”的行保持不变。