Se eu tiver um regex mágico do Vim em uma string literal, existe uma maneira de converter todo o regex em uma representação alternativa que use um modo mágico diferente, para que eu possa colar esse regex equivalente no código-fonte?
Por exemplo, se eu quiser converter esse padrão de modo mágico:
'\m-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>'
para o modo muito mágico para torná-lo mais legível, algo como:
'\v-=<\d+L=>|0[xX][0-9a-fA-F]+>'
Costumo cometer erros ao tentar convertê-los manualmente.
regular-expression
Mu Mind
fonte
fonte
[0-9]+
em um nenhuma mágica ... ;-)Respostas:
O comando
deve ser suficiente para transformar quase qualquer padrão em
\v
modo.\m
Porém, ele não trocará o marcador de lil - e que eu saiba, é impossível em uma única substituição. É curto o suficiente para digitar manualmente, e você pode fazer apenas:s/\\m/\\v
pelo marcador de modo.\W
é uma abreviação para o[^a-zA-Z0-9_]
qual é o conjunto (negado) de caracteres em que o modo muito mágico opera. Isso exclui as barras invertidas imediatamente anteriores a um desses caracteres. Problema conhecido: isso substituirá as\\
cadeias internas para\
. Você pode substituir\W
por\c[^a-z0-9\_]
para mitigar isso, mas ele ainda estragará o seu regex literal se você executá-lo várias vezes e também falhar em seqüências de escape mais longas (contendo,\\\\
por exemplo)Atualização: a pergunta original deixa claro se você precisa
\v
voltar\m
, mas o comando existe:fonte