16

假设我有一条线:

a|b|c

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

a\|b\|c

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

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

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

4

3 回答 3

15

vim 有自己的正则表达式语法。vim 帮助文档中有一个与 PCRE 的比较(请参阅 参考资料:help perl-patterns)。

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

默认情况下,vim 有magic模式。如果您想让:s问题中的命令起作用,只需激活very magic

:s/\v\|/\\|/g
于 2013-09-18T21:06:28.693 回答
8

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

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

:. s%|%\\|%g
于 2013-09-18T20:59:41.623 回答
3

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

:s#\v\|#\\|#g
于 2013-09-18T21:05:44.057 回答