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

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

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

Um exemplo simples seria uma linha onde desejo substituir (10), {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]*)/{\0}/

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

Então, eu tentei

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

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

Acho que preciso de algum outro tipo de marcação/referência em vez de this \0, mas não sei onde procurar. Então a questão é: isso pode ser feito no vim e, em caso afirmativo, como?

Responder1

\0é a partida inteira. Para usar apenas parte dele você precisa configurá-lo assim e usar \1

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

Instruções mais detalhadas você pode encontraraquiou ajuda no vim.

Responder2

Recentemente herdei algum código legado 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 anteriore na esperança de que alguém se beneficie com isso usei o seguinte comando, que mudará todas as ocorrências:

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

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

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

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

Responder3

A melhor maneira de revisar cada correspondência é adicionar um "c" ao final do código, em vez de ir linha por linha

%s/print\( .*\)/logging.info\(\1\)/gc

informação relacionada