VIM - 同一行上多个命令的第一个命令被忽略
VIM - First command on multiple command on same line being ignored
我正在从几个文件中提取信息,并编写了以下命令:
:g!/Value/d | %s/.*=//ge | %s/\;//ge | %y
它基本上是这样的:
'delete lines without "Value" | delete everything up to the = sign | remove ";" | copy all to register'
但是第一个 :g!/Value/d
被忽略了,似乎 %y
以某种方式导致它被忽略为
:g!/Value/d | %s/.*=//ge | %s/\;//ge
正确清理文档。
我还尝试从命令执行中获取日志,但没有任何帮助。
我不明白最后一个命令如何影响第一个命令。
所以我找到了解决这个问题的方法
execute 'g!/\.Value/de' | %s/.*=//ge | %s/\;//ge | %y
这将产生预期的行为,但仍不清楚为什么该栏对 :g
命令不起作用。
|
命令分隔符根据命令具有不同的优先级,如 :help :bar
所述。对于 :global
命令,它(和后续命令)被 视为命令参数本身的一部分 。这意味着你的替换和 yank 不会执行一次(在 :global
之后),但实际上 在 :global
选择的每一行 !
您已经找到了正确的解决方法:通过将命令包装在 :execute
中(尊重 |
命令分隔)并引用它,以下命令仅在第一个命令之后计算.
我正在从几个文件中提取信息,并编写了以下命令:
:g!/Value/d | %s/.*=//ge | %s/\;//ge | %y
它基本上是这样的: 'delete lines without "Value" | delete everything up to the = sign | remove ";" | copy all to register'
但是第一个 :g!/Value/d
被忽略了,似乎 %y
以某种方式导致它被忽略为
:g!/Value/d | %s/.*=//ge | %s/\;//ge
正确清理文档。
我还尝试从命令执行中获取日志,但没有任何帮助。
我不明白最后一个命令如何影响第一个命令。
所以我找到了解决这个问题的方法
execute 'g!/\.Value/de' | %s/.*=//ge | %s/\;//ge | %y
这将产生预期的行为,但仍不清楚为什么该栏对 :g
命令不起作用。
|
命令分隔符根据命令具有不同的优先级,如 :help :bar
所述。对于 :global
命令,它(和后续命令)被 视为命令参数本身的一部分 。这意味着你的替换和 yank 不会执行一次(在 :global
之后),但实际上 在 :global
选择的每一行 !
您已经找到了正确的解决方法:通过将命令包装在 :execute
中(尊重 |
命令分隔)并引用它,以下命令仅在第一个命令之后计算.