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

rbe*_*ldo 6 regex vim replace

在Vim的正则表达式,我知道这是可能取代foobar上开始的所有生产线%使用

:g/^%/s/foo/bar/g
Run Code Online (Sandbox Code Playgroud)

但我想,以取代foobar所有线路上不启动%.有没有办法轻松这样做?

Jim*_*vis 10

试试:vglobal:

:v/^%/s/foo/bar/g
Run Code Online (Sandbox Code Playgroud)


Roh*_*ain 6

您可以%使用character class以下方法否定角色: -

:g/^[^%]/s/foo/bar/g
Run Code Online (Sandbox Code Playgroud)

[^%]匹配除%字符串开头之外的任何字符.


Mic*_*unn 5

相反的:g:g!,所以你的例子可以表达:

:g!/^%/s/foo/bar/g
Run Code Online (Sandbox Code Playgroud)

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