首页 > 解决方案 > VIM - 同一行上多个命令的第一个命令被忽略

问题描述

我正在从几个文件中提取信息,并编写了以下命令:

:g!/Value/d | %s/.*=//ge | %s/\;//ge | %y

它基本上是:'删除没有“价值”的行| 删除所有直到 = 符号 | 消除 ”;” | 复制所有注册'

但第一个:g!/Value/d被忽略了,似乎以%y某种方式导致它被忽略为

:g!/Value/d | %s/.*=//ge | %s/\;//ge

正确清洁文档。

我还尝试从命令执行中获取日志,那里没有任何帮助。

我看不出最后一个命令如何影响第一个命令。

标签: vimcommand

解决方案


正如解释的那样,命令分隔符根据|命令具有不同的优先级。:help :bar对于:global命令,它(和后续命令)被认为是命令参数本身的一部分。这意味着您的替换和 yank 不会执行一次(在 之后:global),而是实际上在选择的每一行上:global执行!

您已经找到了正确的解决方法:通过将命令包装在:execute(尊重|命令分隔)并引用它,以下命令仅在第一个命令之后进行评估。


推荐阅读