【问题标题】:VIM - First command on multiple command on same line being ignoredVIM - 同一行上多个命令的第一个命令被忽略
【发布时间】:2019-10-25 08:59:14
【问题描述】:

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

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

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

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

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

正确清理文档。

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

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

【问题讨论】:

    标签: vim command


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-16
        • 1970-01-01
        • 1970-01-01
        • 2021-06-06
        • 1970-01-01
        • 2012-02-14
        • 2018-07-17
        相关资源
        最近更新 更多