Substitua usando o VIM, reutilize parte do padrão de pesquisa

27

Estou trabalhando com VIm e tentando configurar um comando de pesquisa e substituição para fazer algumas substituições em que posso reutilizar a expressão regular que faz parte da minha cadeia de pesquisa.

Um exemplo simples seria uma linha onde eu quero substituir (10) to {10} , onde 10 pode ser qualquer número.

Eu cheguei até aqui

  .s/([0-9]*)/what here??/

que corresponde exatamente à parte que eu quero.

Agora a substituição, eu tentei

  .s/([0-9]*)/{
 .s/(\zs[0-9]*\ze)/{
  .s/([0-9]*)/what here??/
}/
}/

Mas, isso dá como saída {(10)}

Então, eu tentei

  .s/([0-9]*)/{
 .s/(\zs[0-9]*\ze)/{%pre%}/
}/

No entanto, isso me deu ({10}) , que também fecho, mas não o que eu quero.

Acho que preciso de algum outro tipo de marcação / back-referenciação em vez deste %code% , mas não sei onde procurar. Então a questão é, isso pode ser feito no vim, e se sim, como?

    
por Bernhard 28.03.2012 / 11:25

3 respostas

33

%code% é o jogo inteiro. Para usar apenas parte dele, você precisa configurá-lo assim e usar \ 1

.s/(\([0-9]*\))/{}/

Mais instruções detalhadas você pode encontrar aqui ou na ajuda do vim.

    
por 28.03.2012 / 11:47
0

Eu herdei recentemente alguns códigos legados e queria substituir todas as ocorrências como:

print "xx"
print x,y
print 'xx'

para

logging.info("xy") 

ou

logging.info(x,y)

Com base na resposta anterior e na esperança de que alguém se beneficie dela Eu usei o seguinte comando, que mudará todas as ocorrências:

%s/print\( .*\)/logging.info\(\)/g

Se você substituir % por . e remover /g , você acabará com

.s/print\( .*\)/logging.info\(\)

que permitirá que você analise cada partida e escolha se deseja alterá-la ou não.

    
por 20.03.2017 / 20:19
0

A melhor forma de permitir que você repasse cada correspondência é adicionar um "c" ao final do código, em vez de ir linha por linha

%s/print\( .*\)/logging.info\(\)/gc
    
por 26.04.2018 / 06:04