我正在从几个文件中提取信息,并且编写了以下命令:
:g!/Value/d | %s/.*=//ge | %s/\;//ge | %y
并且基本上可以做到:'删除没有“值”的行|删除所有内容,直到=符号|去掉 ”;” |全部复制到注册'
但是第一个:g!/Value/d
被忽略,似乎%y
某种程度上导致它被忽略为
:g!/Value/d | %s/.*=//ge | %s/\;//ge
正确清洁文档。
我还尝试从命令执行中获取日志,那里没有任何帮助。
我看不到最后一个命令如何影响第一个命令。
所以我找到了解决此问题的方法
execute 'g!/\.Value/de' | %s/.*=//ge | %s/\;//ge | %y
这将产生预期的行为,但仍然不清楚为什么该条不适用于:g
命令。
|
命令分隔符的优先级因命令而异,如:help :bar
所述。对于:help :bar
命令,它(及其后的命令)被认为是命令参数本身的一部分。这意味着您的替换和猛击不会执行一次(在:global
之后),而是实际上在:global
选择的每一行上!
您已经找到了正确的解决方法:通过将命令包装在:global
中(遵守:execute
命令分隔)并引用该命令,仅在第一个命令之后评估以下命令。