Vim - 在不以'character'开头的行上用'bar'替换'foo'

时间:2013-01-22 20:58:05

标签: regex vim replace

在Vim正则表达式中,我知道可以使用

foo开头的所有行上的bar替换%
:g/^%/s/foo/bar/g

但我想在foobar开头的所有行上将%替换为{{1}}。有没有办法轻松这样做?

4 个答案:

答案 0 :(得分:10)

尝试:vglobal

:v/^%/s/foo/bar/g

答案 1 :(得分:6)

您可以使用%否定character class字符: -

:g/^[^%]/s/foo/bar/g

[^%]匹配除%之外的任何字符,位于字符串的开头。

答案 2 :(得分:5)

:g的倒数为:g!,因此可以表达您的示例:

:g!/^%/s/foo/bar/g

请注意,:g!只是撰写:v的另一种方式(参见Jim Davis的回答)

答案 3 :(得分:3)

尝试:g/^[^%]/s/foo/bar/g以匹配所有不以%

开头的行