vim多字符替换正则表达式问题

时间:2017-12-08 20:01:40

标签: vim substitution

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

或者,您只能=\zs 开始匹配。这个断言符号部分在那里,但因为它不包含在匹配中,所以你不需要引用它:

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

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

答案 1 :(得分:1)

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

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

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