vim: use string da pesquisa no comando replace

16

Costumo usar o /comando vim search para verificar minhas expressões regulares (apenas para ver o que corresponde). Depois disso, geralmente uso o :%scomando replace, onde utilizo esse regexp da pesquisa como uma string a ser substituída, por exemplo, primeiro procuro essa string:

/TP-\(\d\{5\}\)-DD-\d\{3\}

Corresponde exatamente ao que eu quero, então substituo:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g

Mas eu tenho que escrever novamente toda a regexp aqui. Normalmente esse regexp é muito mais longo, é por isso que estou procurando uma solução:

Existe algum atalho ou script vim existente para colar esse padrão de pesquisa diretamente no comando replace?

Eu uso o vim no terminal (sem gvim).

kars7e
fonte

Respostas:

20

Em geral, uma expressão regular vazia significa usar a expressão regular inserida anteriormente, portanto :%s//\1/g, faça o que você deseja.

geekosaur
fonte
Uau, é fácil assim! Exatamente o que eu precisava, obrigado.
kars7e
10
Além disso, se você deseja verificar ou modificar o último padrão usado, você pode usar Control-r , em seguida, /para inserir o conteúdo do registo pesquisar padrão ( /) diretamente em uma linha de comando parcialmente digitada (por exemplo, logo depois :%s/).
31711 Chris Chrissen
isso também é uma dica muito útil. Obrigado @ Chris! 1
kars7e
E se eu quiser acompanhar "\ 1" com um número como digamos 23? Como evito que seja interpretado como "\ 123"?
Champ
@ Champ Como as referências anteriores só aumentam \9, não há ambiguidade.
Kusalananda
4

Outra boa maneira de ver pesquisas de expressões regulares anteriores e comandos Ex e fazer alterações nelas é editar esses comandos no modo normal. Nesse modo, você terá todos os seus poderes do vim, incluindo copiar e colar.

  • Pesquisa: em vez de ?ou /para pesquisar, tenteq/ ouq?
  • para comandos Ex, em vez de : tentarq:
  • para sair deste modo, use CtrlC

Para ler mais, consulte :help q:.

Ryan Carney
fonte