¿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:
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.
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
Respuestas:
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 pattern
y:help substitute
para 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.fuente
(
se trata especialmente mientras{
no se trata: "todos los caracteres ASCII excepto '0' - '9', 'a' - 'z', 'A' - 'Z' y '_' tiene un significado especial ". ¡Gracias!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
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
+perl
función. Verfuente
:help perl-patterns
ha resuelto lo que antes odiaba de vimTambién puedes usar:
en lugar de:
fuente
nnoremap / /\v
yvnoremap / /\v
a su .vimrc para que cuando escriba/
simplemente funcione.Aquí hay una solución de http://vim.wikia.com/wiki/Perl_compatible_regular_expressions
:perldo s/(\w+)/\u$1/g
(Verifique con
:ver
eso+perl
o+perl/dyn
esté compilado).fuente
Use el complemento eregex.vim . Es muy útil y no he tenido problemas con eso.
fuente