如何在Vim中顺序执行多个全局命令?(错误:“无法执行:全局递归”)

如何在Vim中顺序执行多个全局命令?(错误:“无法执行:全局递归”),vim,global,ex,Vim,Global,Ex,我想使用以下全局命令,根据首字母对文本中的段落进行排序: 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/

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

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

这些命令将
|
视为其参数,因此不能使用 接着是另一个Vim命令:

  • (…命令列表…)
  • :全局
  • (…命令列表…)
请注意,这是令人困惑的(从Vi继承):与
:g
相比,
|
是 包含在命令中,但不包含在
:s

要使用其他命令,请使用 指挥部

这也回答了为什么下面的链可以在没有任何问题的情况下工作:

%s/htm/html/c | %s/JPEG/jpg/c | %s/GIF/gif/c

在这种情况下,不必在
:execute
中同时包装
:global
命令,只包装第一个命令就足够了:
:exe'g/_p/,/^$/mo$';g/_w/,/^$/mo$
@ib:我采纳了你的建议。很好,谢谢!我特别喜欢这样一个事实,您甚至节省了
:exe
与其参数
'…
之间的空间。xD(是vimscript的几行代码,用于对所有段落进行排序。但是它们通过缩进识别段落,而不是空行。但是,人们肯定可以调整它,以通过空行区分段落。)