Posso usar expressões regulares perl na linha de comando do vim?

27

Eu quero usar expressões regulares perl na linha de comando do vim. Por exemplo, para colocar em maiúscula as palavras na linha atual, você pode digitar:

:s/(\w+)/\u$1/g
user51549
fonte
From : help perl-patterns ... As expressões regulares do Vim são muito semelhantes às do Perl, em termos do que você pode fazer. A diferença entre eles é principalmente notação, uhhmm ... é como dizer chinês é semelhante ao grego, em termos do que você pode se comunicar. A diferença é principalmente apenas notação. regex não passa de notação! As diferenças são irritantes se uma notação é menos familiar que outra. É por isso que as pessoas perguntam sobre perl em primeiro lugar!
dreftymac 7/09

Respostas:

19

Você pode filtrar qualquer linha ou intervalo de linhas através de um comando externo no vim, usando! Por exemplo, você pode fazer:

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

que filtrará a linha atual através desse comando perl. (Aqui, :para entrar no modo de linha de comando, e o .que se segue significa a linha atual; você também pode especificar um intervalo de linhas ou %para o arquivo inteiro etc.)

Se você deseja usar os padrões de substituição embutidos no vim, o mais próximo que você vai chegar é usar a opção "muito mágica" do vim, \ v, assim:

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

veja :help patterne :help substitutepara mais detalhes. Eu não acho que "muita mágica" seja idêntico aos padrões de perl, mas é muito próximo. De qualquer forma, você sempre pode usar o próprio perl se estiver mais confortável com ele, como acima.

frabjous
fonte
11
Além disso, com muita mágica, você não precisa memorizar o que (é tratado especialmente enquanto {não é: "todos os caracteres ASCII, exceto '0' - '9', 'a' - 'z', 'A' - 'Z' e '_' tem um significado especial. " obrigado!
Ayrat 27/03
10

Não, você não pode usar expressões regulares do Perl dessa maneira. Para obter ajuda na aprendizagem dos equivalentes do Vim para componentes de expressão regular Perl, consulte

:help perl-patterns

No entanto, você pode usar Perl como um filtro externo, conforme explicado por frabjous. Você também pode executar comandos Perl no Vim usando a interface Perl, se o seu Vim foi compilado com o +perlrecurso. Vejo

:help if_perl.txt
garyjohn
fonte
2
+1, :help perl-patternsresolveu a única coisa que eu já odiava sobre vim
Mark K Cowan
8

Você também pode usar:

/\v"your regex"

ao invés de:

/"your regex"
Kevin
fonte
Esta é a resposta que eu estava procurando!
Alexdcete 06/12/19
Você também pode se ajudar adicionando nnoremap / /\ve vnoremap / /\vao seu .vimrc para que, quando você digitar /, funcione.
mattmc3 16/08