我知道我们对此有很多问题(和答案),但直到现在我无法解决我的问题。我只需要在同一行中执行这些命令(和其他命令):
%s/request_snapshot\zs\s*=\s*true/ = false
%s/primary_dev\zs\s*=\s*"[^"]*"/ = "vnic"
我已经尝试过:
%s/request_snapshot\zs\s*=\s*true/ = false | %s/primary_dev\zs\s*=\s*"[^"]*"/ = "vnic"
%s#request_snapshot\zs\s*=\s*true# = false | %s#primary_dev\zs\s*=\s*"[^"]*"# = "vnic"
%s#request_snapshot\zs\s*=\s*true# = false \| %s#primary_dev\zs\s*=\s*"[^"]*"# = "vnic"
什么也没有。一个非常好的答案是不用担心替换" /"由任何其他角色,因为我需要执行许多命令,这将是非常痛苦的。
答案 0 :(得分:3)
最简单的解决方案是创建一个函数然后调用该函数。因为您可以将每个替换命令放在自己的行上。
如果你真的想要链接它们,你必须终止替换命令。
%s/request_snapshot\zs\s*=\s*true/ = false/
在每个替换的末尾加上一个斜杠(分隔符)。
所以
%s/request_snapshot\zs\s*=\s*true/ = false/ | %s/primary_dev\zs\s*=\s*"[^"]*"/ = "vnic"
^
将是可以链接的有效替换。
原始人认为它具有尾随字符的原因是管道不会结束替换。 %s
结束替换后的斜杠。并且primary_dev\zs\s*=\s*"[^"]*"/ = "vnic"
不构成有效标记。
答案 1 :(得分:3)
单个替换命令不需要最后一个分隔符(通常是斜杠,/
),因为可以假设它。当您使用|
执行多个命令时,您需要确保拥有最终的分隔符。
:%s/foo/bar
:%s/hello/world
会变成:
:%s/foo/bar/e | %s/hello/world/e
注意:我还添加了e
标志,如果没有发生替换,它会抑制错误,因为这会停止管道。
所以你的最终命令如下:
%s/request_snapshot\zs\s*=\s*true/ = false/e | %s/primary_dev\zs\s*=\s*"[^"]*"/ = "vnic"/e