Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VIM中执行多个%s命令时,始终显示错误E488:尾随字符_Vim - Fatal编程技术网

在VIM中执行多个%s命令时,始终显示错误E488:尾随字符

在VIM中执行多个%s命令时,始终显示错误E488:尾随字符,vim,Vim,我知道我们对此有很多问题和答案,但直到现在我还不能解决我的问题。我只需要在同一行中执行这些命令和其他命令: %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_snap

我知道我们对此有很多问题和答案,但直到现在我还不能解决我的问题。我只需要在同一行中执行这些命令和其他命令:

%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"

什么也没有。一个非常好的答案是不用担心用任何其他字符替换/,因为我需要执行许多命令,这将非常痛苦。

最简单的解决方案是创建一个函数,然后调用该函数。因为您可以将每个替换命令放在它自己的行上

如果确实要链接它们,则必须终止替换命令

%s/request_snapshot\zs\s*=\s*true/ = false/
通过在每个替换的末尾放置一个尾部斜杠分隔符

所以

将是可以链接的有效替换


原始文件认为它具有尾随字符的原因是管道没有结束替换。%s后的斜杠结束替换。并且主\u dev\zs\s*=\s*[^]*/=vnic不构成有效标志。

最简单的解决方案是创建一个函数,然后调用该函数。因为您可以将每个替换命令放在它自己的行上

如果确实要链接它们,则必须终止替换命令

%s/request_snapshot\zs\s*=\s*true/ = false/
通过在每个替换的末尾放置一个尾部斜杠分隔符

所以

将是可以链接的有效替换


原始文件认为它具有尾随字符的原因是管道没有结束替换。%s后的斜杠结束替换。并且主\u dev\zs\s*=\s*[^]*/=vnic不构成有效标志。

单次替换命令不需要最后一个分隔符,通常是斜杠,/这是可以假定的。当使用|执行多个命令时,需要确保具有最终分隔符

:%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

单替换命令不需要最后一个分隔符,通常是斜杠,/可以这样假设。当使用|执行多个命令时,需要确保具有最终分隔符

:%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

两个答案都很好,但我喜欢e选项。非常感谢你和弗迪诺夫。之后,我将学习函数,检查如何将所有内容放在那里。两个答案都很好,但我喜欢e选项。非常感谢你和弗迪诺夫。之后,我将学习函数,检查如何将所有内容放在那里。