我想使用以下全局命令根据其首字母对段落进行排序:
g/_p/,/^$/mo$
这单独起作用。但是当我一次使用多个全局命令时,就会发生错误:
g/_p/,/^$/mo$|g/_w/,/^$/mo$
这将产生以下错误:
Cannot do :global recursive
如何立即顺序运行这些命令?
:exe 'g/_p/,/^$/mo$' | g/_w/,/^$/mo$
要附加更多global
命令,只需将它们包装在execute
中:
:execute 'g/aaa/s//bbb/g ' | execute 'g/ccc/s/ddd//g' | execute 'g/eee/s/fff/ggg/g' | g/^cake/s/$/ is a lie/g
错误原因在:help
:bar
中:
[
:bar
*:bar* *:\bar*
可用于分隔命令,因此您可以在一行中给出多个命令。如果您想在[参数,请在其前面加上|
。这些命令将
|
作为其参数,因此不能然后是另一个Vim命令:
- (..命令列表..]
\
- (..命令列表..]
请注意,这令人困惑(从Vi继承):对于
|
,:global
为包含在命令中,但不包含:g
。[无论如何都可以使用其他命令,请使用
|
命令。
这也回答了为什么下面的链可以正常工作的原因:
:s
:execute
是vimscript的几行,将所有段落排序。但是他们通过缩进而不是空行来识别段落。但是可以肯定的是,可以通过空行对其进行区分以区分段落。