Vim正则表达式替换/转义管道字符

18

假设我有一条线:

a|b|c

我想运行一个正则表达式将其转换为:

a\|b\|c

在我熟悉的大多数正则表达式引擎中,类似 s%\|%\\|%g 的表达式应该是可行的。但是如果我在Vim中尝试这样做,会出现以下结果:

\|a\||\|b\||\|c
事实证明,当我打这个问题的时候我发现了答案。无论如何,我会提交它和我的解决方案,因为我有点惊讶搜索没有出现任何重复内容。
3个回答

16

vim有自己的正则表达式语法。在vim帮助文档中与PCRE进行了比较(请参见:help perl-patterns)。

除此之外,vim没有魔法/魔术/超级魔法模式。:h magic查看表格。

默认情况下,vim处于魔术模式。如果您想让问题中的:s命令起作用,请激活非常魔术

:s/\v\|/\\|/g

10
在这方面,Vim与PCRE相反:|是一个字面上的管道字符,\|作为替换运算符。我找不到合适的转义序列,因为管道字符不需要转义。

以下命令适用于我的示例行:

:. s%|%\\|%g

2
ńŻáń╝Üň»╣magicŃÇünomagicňĺî_very magic_ŠĘíň╝ĆŠäčňů┤ŔÂúšÜäŃÇé - sehe

3
如果你使用very-magic(使用\v),你就可以在大多数特殊字符上获得Perl/pcre的行为(不包括vim的特定字符)。
:s#\v\|#\\|#g

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接