【问题标题】:vim multiple character substitute regex issuevim多字符替换正则表达式问题
【发布时间】:2017-12-08 20:01:40
【问题描述】:

我对 Vim 世界并不陌生。我正在尝试将*=~=(实际上是[special char]=)替换为[whatever is symbol]=(两边都加空格)。这是我的替代命令:

:%s/[~,\*]=/ = /g

这种情况下的问题是我无法在等号之前添加相应的特殊符号。你能帮帮我吗...

【问题讨论】:

  • 看起来你想要类似::%s/\([~,\*]\)=/ \1= /g\( \) 在符号周围创建一个组,然后我们在替换中使用 \1 引用它。
  • 啊,我在尝试$1。谢谢你的帮助:)

标签: vim substitution


【解决方案1】:

这是一个经典的捕获和替换用例。通过将符号部分括在\(...\) 中来捕获它,然后通过\1 在替换部分中引用它。您可以在:help s/\1(或一般:help :substitute)找到更多详细信息:

:%s/\([~,\*]\)=/ \1= /g

或者,您可以开始仅在=\zs 上进行匹配。这断言符号部分在那里,但由于它不包含在匹配中,您不需要引用它:

:%s/[~,\*]\zs=/ = /g

同样的技巧可以在结尾处使用\ze。如您所见,这通常会导致命令更短。

【讨论】:

    【解决方案2】:

    这可能是您问题的最简单答案:

    :%s/[~,\*]=/ & /
    

    替换段中的 An& 表示“完全匹配”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 2012-04-27
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多