我正在从多个文件中提取信息,并编写了以下命令:
:g!/Value/d | %s/.*=//ge | %s/\;//ge | %y
它基本上是这样的: '删除没有“值”的行 |删除 = 符号 | 之前的所有内容消除 ”;” |全部复制到注册'
但第一个 :g!/Value/d
被忽略,似乎 %y
不知何故导致它被忽略为
:g!/Value/d | %s/.*=//ge | %s/\;//ge
正确清理文档。
我还尝试从命令执行中获取日志,但没有任何帮助。
我不明白最后一个命令如何影响第一个命令。
最佳答案
|
命令分隔符根据命令的不同具有不同的优先级,如 :help :bar
解释说。对于 :global
命令,它(以及后续命令)被视为命令参数本身的一部分。这意味着您的替换和复制不会执行一次(在 :global
之后),而是实际上在 :global
选择的每一行上执行!
您已经找到了正确的解决方法:通过将命令包装在 :execute
中(尊重 |
命令分隔)并引用它,以下命令仅是在第一个命令后进行评估。
关于VIM - 同一行上多个命令的第一个命令被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58555326/