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:
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.
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
Respostas:
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 pattern
e:help substitute
para 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.fonte
(
é tratado especialmente enquanto{
não é: "todos os caracteres ASCII, exceto '0' - '9', 'a' - 'z', 'A' - 'Z' e '_' tem um significado especial. " obrigado!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
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
+perl
recurso. Vejofonte
:help perl-patterns
resolveu a única coisa que eu já odiava sobre vimVocê também pode usar:
ao invés de:
fonte
nnoremap / /\v
evnoremap / /\v
ao seu .vimrc para que, quando você digitar/
, funcione.Aqui está uma solução em http://vim.wikia.com/wiki/Perl_compatible_regular_expressions
:perldo s/(\w+)/\u$1/g
(Verifique com
:ver
isso+perl
ou+perl/dyn
está compilado.)fonte
Use o plug- in eregex.vim . É muito útil e não tive problemas com isso.
fonte