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

时间:2013-09-18 20:59:42

标签: regex vim

我们假设我有一条线:

a|b|c

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

a\|b\|c

在我熟悉的大多数正则表达式引擎中,像s%\|%\\|%g这样的东西应该可行。如果我在Vim中尝试这个,我得到:

\|a\||\|b\||\|c

事实证明,我在输入这个问题时发现了答案。无论如何,我会用我的解决方案提交它,因为我有点惊讶搜索没有发现任何重复。

3 个答案:

答案 0 :(得分:13)

vim有自己的正则表达式语法。在vim帮助文档中与PCRE进行了比较。

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

默认情况下,vim具有magic模式。如果您想在问题中设置:s命令,只需激活very magic

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

基本上这是一种RTFM的事情......

答案 1 :(得分:6)

在这方面,Vim与PCRE相反:|是一个文字管道字符,\| serving as the alternation operator。我找不到合适的转义序列,因为管道符不需要转义。

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

:. s%|%\\|%g

答案 2 :(得分:2)

如果您使用very-magic(使用\v),您将对大多数特殊字符(不包括vim细节)具有Perl / pcre行为:

:s#\v\|#\\|#g