9

我想使用以下全局命令根据它们的首字母对文本中的段落进行排序:

g/_p/,/^$/mo$

这单独工作。但是当我一次使用多个全局命令时,就会出现错误:

g/_p/,/^$/mo$|g/_w/,/^$/mo$

这给出了以下错误:

Cannot do :global recursive

如何一次按顺序运行这些命令?

4

1 回答 1

9
: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* |可用于分隔命令,因此您可以在一行中给出多个命令。如果要|在参数中使用,请在其前面加上\.

这些命令将|视为它们的参数,因此不能跟随另一个 Vim 命令:

  • (.. 命令列表..)
  • :global
  • (.. 命令列表..)

请注意,这是令人困惑的(继承自 Vi):命令中包含的是,而:g不是。|:s

为了能够使用另一个命令,请使用该:execute 命令。

这也解释了为什么下面的链可以正常工作:

%s/htm/html/c | %s/JPEG/jpg/c | %s/GIF/gif/c
于 2012-03-17T15:28:33.550 回答