Vim - 仅在某些行上执行替换

use*_*544 0 vim substitution

我在寻求仅在偶数行上执行替换时发现了以下内容:

:g/^/if !(line('.')%2)|s/foo/bar/g|endif 
Run Code Online (Sandbox Code Playgroud)

效果很好.但有人可以解释一下|的必要性 :g调用的命令部分中的字符?

Ing*_*kat 5

|字符是命令分隔符 ; 使用它,您可以在一行中连接多个Ex命令,而无需添加换行符.见:help :bar.

因此,您的条件等同于以下内容:

if !(line('.')%2)
    s/foo/bar/g
endif
Run Code Online (Sandbox Code Playgroud)

请注意,某些Ex命令会占用命令行的整个剩余部分,因此无法直接连接|.但是你可以将这些命令包装起来:execute "{cmd}".