首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Vim中顺序执行多个全局命令?(错误:“无法执行:全局递归”)

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

Stack Overflow用户
提问于 2012-03-17 22:20:49
回答 1查看 1.6K关注 0票数 9

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

代码语言:javascript
复制
g/_p/,/^$/mo$

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

代码语言:javascript
复制
g/_p/,/^$/mo$|g/_w/,/^$/mo$

这会产生以下错误:

代码语言:javascript
复制
Cannot do :global recursive

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-17 23:28:34

代码语言:javascript
复制
:exe 'g/_p/,/^$/mo$' | g/_w/,/^$/mo$

要追加更多global命令,只需继续将它们包装在execute

代码语言:javascript
复制
: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命令。

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

代码语言:javascript
复制
%s/htm/html/c | %s/JPEG/jpg/c | %s/GIF/gif/c
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9750697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档