Si tengo una expresión regular Vim mágica en un literal de cadena, ¿hay alguna forma de convertir la expresión regular completa en una representación alternativa que use un modo mágico diferente, para poder pegar esa expresión regular equivalente en el código fuente?
Por ejemplo, si quiero convertir este patrón en modo mágico:
'\m-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>'
al modo muy mágico para hacerlo más legible, algo como:
'\v-=<\d+L=>|0[xX][0-9a-fA-F]+>'
A menudo cometo errores al tratar de convertirlos a mano.
regular-expression
Mu Mind
fuente
fuente
[0-9]+
en una no mágica ... ;-)Respuestas:
El comando
debería ser suficiente para transformar casi cualquier patrón en
\v
modo. Sin\m
embargo , no cambiará el marcador lil ' , y que yo sepa, eso es imposible en un solo reemplazo. Sin embargo, es lo suficientemente corto como para escribir manualmente, y luego puede hacerlo:s/\\m/\\v
para el marcador de modo.\W
es una abreviatura para la[^a-zA-Z0-9_]
cual es el conjunto (negado) de caracteres en el que opera el modo muy mágico. Esto simplemente elimina cualquier barra diagonal inversa que precede inmediatamente a uno de esos caracteres. Problema conocido: esto reemplazará las\\
cadenas internas de\
. Puede reemplazar\W
con\c[^a-z0-9\_]
para mitigar esto, pero aún arruinará su literal regex si lo ejecuta varias veces y también falla en cadenas de escape más largas (que contienen,\\\\
por ejemplo)Actualización: la pregunta original deja en claro si necesita
\v
volver a transformarse\m
, pero el comando allí es:fuente