如何在vim中编写一个命令来运行多个命令?

qua*_*ant 10 vim

我编写了一些命令,通过将以下内容放在我的.vimrc文件中来执行常见功能:

command! FixWhitespace %s/ \+$//g
command! FixCommas %s/,\S\@=/, /g
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个运行这两个命令的第三个命令,但以下不起作用:

command! Fix FixWhitespace|FixCommas
Run Code Online (Sandbox Code Playgroud)

当我:Fix从内部运行时,vim我收到以下消息:

E488:尾随字符:FixWhitespace|FixCommas

我不确定此错误消息与我所做的事情有何关系,但显然我没有做正确的事情!

我正在使用 Vim 7.4。

小智 14

你需要告诉 vimcommand! -bar一个命令后面可以跟另一个带有管道符号的命令|

command! -bar FixWhitespace %s/\s\+$//e
command! FixCommas %s/,\S\@=/, /ge
Run Code Online (Sandbox Code Playgroud)

现在可以了:

command! Fix FixWhitespace|FixCommas
Run Code Online (Sandbox Code Playgroud)

但这不是:

command! Fix FixCommas|FixWhitespace
Run Code Online (Sandbox Code Playgroud)

有关:h command-bar更多详细信息,请参阅。

错误消息E488: Trailing characters: FixWhitespace|FixCommas是 vim 告诉您它不希望FixWhitespace命令后面有任何内容的方式。见:h E488


顺便说一句,您的FixWhitespace命令不需要g标志,因为模式在每一行上最多可以匹配一次。我还会设置e标志以抑制烦人的错误消息。见:h s_flags