
Estou trabalhando VIm
e 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, /g
você 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