例如,如果我想将此魔术模式转换为:
'\m-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>'
转换为非常魔术模式以使其更具可读性,例如:
'\v-=<\d+L=>|0[xX][0-9a-fA-F]+>'
尝试手动将它们转换时,我经常犯错误。
#1 楼
命令:s\v\(\W)//
应该足以将大多数模式转换为
\v
模式。但是,它不会替换掉liq'\m
标记-据我所知,这是一次替换不可能实现的。它足够短,可以手动键入,然后可以对模式标记执行:s/\m/\v
。\W
是[^a-zA-Z0-9_]
的简写形式,它是运行非常魔术模式的(取反)字符集。这只会删除其中一个字符之前的任何反斜杠。已知问题:这会将字符串内的
\
替换为\
。您可以用\W
替换\c[^a-z0-9\_]
来减轻这种情况,但是如果您多次运行它并且仍然无法处理更长的转义字符串(例如包含\\
),它仍然会弄乱正则表达式文字。更新:The最初的问题使您不清楚是否需要将
\v
转换回\m
,但是命令如下::s/\v(\)@<!(\c[^a-z0-9\-\\[\]\'_])/\/
评论
我不知道一个。您打算始终将它们用单引号引起来吗?也许这可能是一个起点。但是,我只是勉强测试过。
关于问题标题,很难考虑将非常魔术的正则表达式[0-9] +转换为没有魔术的正则表达式... ;-)
因此,我一直在尝试为此制作一个插件,虽然可以正常工作,但远非完美。另外作为参考,有一个将ruby / perl regex转换为Vim regex的插件,代码是...巨大的:eregex
@MuMind我想我不明白您要寻找的比较类型:-)关于插件的改进,请毫不犹豫地使用github对其进行测试,以表示错误或什至提出请求,我很乐意看看!