¿Puedo usar expresiones regulares perl en la línea de comando vim?

27

Quiero usar expresiones regulares perl en la línea de comando vim. Por ejemplo, para poner en mayúscula las palabras en la línea actual, podría escribir:

:s/(\w+)/\u$1/g
usuario51549
fuente
De : help perl-patterns ... Las expresiones regulares de Vim son más similares a las de Perl, en términos de lo que puedes hacer. La diferencia entre ellos es principalmente la notación uhhmm ... eso es como decir que el chino es similar al griego, en términos de lo que puedes comunicar. La diferencia es principalmente la notación. expresiones regulares no es nada , pero la notación! Las diferencias son molestas si una notación es menos familiar que otra. ¡Es por eso que la gente pregunta por Perl en primer lugar!
dreftymac

Respuestas:

19

Puede filtrar cualquier línea o rango de líneas a través de un comando externo en vim, usando!. Por ejemplo, puedes hacer:

:.!perl -pe "s/(\w+)/\u\1/g"

que filtrará la línea actual a través de ese comando perl. (Aquí :para ingresar al modo de línea de comando, y lo .que sigue significa la línea actual; también puede especificar un rango de línea o %para todo el archivo, etc.)

Si desea usar los patrones de sustitución incorporados de vim, lo más cerca que estará de usar es la opción "muy mágica" de vim, \ v, así:

:s/\v(\w+)/\u\1/g

ver :help patterny :help substitutepara más detalles. No creo que "muy mágico" sea bastante idéntico a los patrones de Perl, pero está muy cerca. De todos modos, siempre puedes usar perl si te sientes más cómodo con él, como se indicó anteriormente.

precioso
fuente
1
además, con mucha magia, no tiene que memorizar que (se trata especialmente mientras {no se trata: "todos los caracteres ASCII excepto '0' - '9', 'a' - 'z', 'A' - 'Z' y '_' tiene un significado especial ". ¡Gracias!
Ayrat
10

No, no puedes usar las expresiones regulares de Perl de esa manera. Para obtener ayuda para aprender los equivalentes de Vim para los componentes de expresión regular de Perl, vea

:help perl-patterns

Sin embargo, puede usar Perl como un filtro externo como lo explica frabjous. También puede ejecutar comandos Perl dentro de Vim usando la interfaz Perl, si su Vim fue compilado con la +perlfunción. Ver

:help if_perl.txt
garyjohn
fuente
2
+1, :help perl-patternsha resuelto lo que antes odiaba de vim
Mark K Cowan el
8

También puedes usar:

/\v"your regex"

en lugar de:

/"your regex"
Kevin
fuente
¡Esta es la respuesta que estaba buscando!
alextercete
También puede ayudarse agregando nnoremap / /\vy vnoremap / /\va su .vimrc para que cuando escriba /simplemente funcione.
mattmc3
2

Use el complemento eregex.vim . Es muy útil y no he tenido problemas con eso.

DBedrenko
fuente