首页 > 解决方案 > 如何使 Vim 在正则表达式控制字符之前不需要反斜杠

问题描述

在 Vim 正则表达式中必须使用的斜线数量非常非常不幸:

:%s/\(\w\+\)\(.*\s\+\)\(\w\+\)$/\3\2\1/

有什么办法可以颠倒规则以便我可以写

:%s/(\w+)(.*\s+)(\w+)$/\3\2\1/

如果我希望它们与该文字字符匹配,我只需要引用(, ), ., *,等?+

标签: regexvimquoting

解决方案


您所指的称为“非常神奇”的模式(请参阅 参考资料:help magic)。

\v您可以为带有标志的表达式打开它:

:%s/\v(\w+)(.*\s+)(\w+)$/\3\2\1/

默认情况下,此功能未启用,默认情况下启用它根本不是一个好主意。但是您始终可以以每个表达式的方式使用它。

有两种不同的魔法模式,分别由和\v开启\m和由 关闭。就像通过and区分大小写一样,您可以使用这些标志来使表达式的一部分变得神奇。\V\M\c\C

但是,如果您在表达式开始时将其打开并且不再将其关闭,则整个表达式将被视为魔术。


推荐阅读