¿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

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.


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

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"

¡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


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.