【问题标题】:Vim-substitute command inserts duplicationVim-substitute 命令插入重复
【发布时间】:2012-07-18 16:49:42
【问题描述】:

我在 Vim 的 substitute-command 中遇到了我无法做到的行为 真的跟随:

鉴于以下包含我想要的 && 序列的代码行 将&& 替换为&& 和换行符:

return a && b

在我的第一次尝试中,我只是使用了s/&amp;&amp; /&amp;&amp;^M/g^M 是通过Ctrl-V <Enter> 插入的)。 这将产生以下代码:

return a && && 
b

插入第二个&amp;&amp;&lt;space&gt; 的替换究竟是如何执行的? 我希望第一个(也是唯一的匹配)是&amp;&amp;&lt;space&gt;,而这个完整的匹配是 替换为&amp;&amp;^M?

问题不在于如何执行正确的替换 - 我最终 使用\zs 标记重置匹配的开始,并且只插入 新队。 我只是想了解为什么要引入重复。

【问题讨论】:

    标签: regex vim substitution


    【解决方案1】:

    您遇到的问题是替换命令将 &amp; 视为替换中的特殊标记,以表示匹配的文本。你需要逃避它。

    :s/&& /\&\&^M/g
    

    【讨论】:

    • 啊,这就解释了为什么s/&amp;&amp; /and&amp;M/g DID 有效。也许我应该打印出:h regex 作为参考。
    • @Gjallar:在游牧模式下&amp;变成一个普通字符。但是,我不确定如何为替换模式打开 nomagic 模式。
    【解决方案2】:

    这个简单的命令应该可以工作,在第一行留下一个不雅的尾随空格:

    :s/&& /&\r
    

    但我不喜欢尾随空格。

    这个可以做你想做的,不留空格:

    :s/&&\zs /\r
    

    我使用&amp;&amp; 作为“标记”,实际匹配的&lt;space&gt;\zs 分隔并替换为回车。

    :help \zs

    编辑

    废话,我完全没看懂你问题的最后一段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      相关资源
      最近更新 更多