Si j'ai une expression rationnelle magique de Vim dans un littéral de chaîne, existe-t-il un moyen de convertir l'intégralité de l'expression régulière en une représentation alternative qui utilise un mode magique différent, afin que je puisse coller cette expression régulière équivalente dans le code source?
Par exemple, si je veux convertir ce modèle en mode magique:
'\m-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>'
en mode très magique pour le rendre plus lisible, quelque chose comme:
'\v-=<\d+L=>|0[xX][0-9a-fA-F]+>'
Je fais souvent des erreurs en essayant de les convertir à la main.
regular-expression
Mu Mind
la source
la source
[0-9]+
en une expression non magique ... ;-)Réponses:
La commande
devrait suffire pour transformer la plupart des motifs en
\v
mode.\m
Cependant, il n'échangera pas le petit marqueur - et à ma connaissance, c'est impossible en un seul remplacement. Cependant, il est assez court pour taper manuellement, puis vous pouvez simplement le faire:s/\\m/\\v
pour le marqueur de mode.\W
est un raccourci pour[^a-zA-Z0-9_]
lequel est l'ensemble (annulé) de caractères sur lequel le mode très magique fonctionne. Cela supprime simplement toutes les barres obliques inverses précédant immédiatement l'un de ces caractères. Problème connu: cela remplacera les\\
chaînes internes de\
. Vous pouvez remplacer\W
par\c[^a-z0-9\_]
pour atténuer cela, mais cela gâchera toujours votre littéral d'expression régulière si vous l'exécutez plusieurs fois et échouez également sur des chaînes d'échappement plus longues (contenant\\\\
par exemple)Mise à jour: la question d'origine ne permet pas de savoir clairement si vous devez
\v
revenir à\m
, mais la commande y est:la source