VIM-忽略同一行上多个命令中的第一个命令

问题描述 投票:0回答:2

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

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

并且基本上可以做到:'删除没有“值”的行|删除所有内容,直到=符号|去掉 ”;” |全部复制到注册'

但是第一个:g!/Value/d被忽略,似乎%y某种程度上导致它被忽略为

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

正确清洁文档。

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

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

vim command
2个回答
0
投票

所以我找到了解决此问题的方法

execute 'g!/\.Value/de' | %s/.*=//ge | %s/\;//ge | %y

这将产生预期的行为,但仍然不清楚为什么该条不适用于:g命令。


0
投票

|命令分隔符的优先级因命令而异,如:help :bar所述。对于:help :bar命令,它(及其后的命令)被认为是命令参数本身的一部分。这意味着您的替换和猛击不会执行一次(在:global之后),而是实际上:global选择的每一行上

您已经找到了正确的解决方法:通过将命令包装在:global中(遵守:execute命令分隔)并引用该命令,仅在第一个命令之后评估以下命令。

© www.soinside.com 2019 - 2024. All rights reserved.