Sostituisci usando VIM, riutilizza parte del modello di ricerca


29

Sto lavorando con VIme sto cercando di impostare una ricerca e un comando di sostituzione per eseguire alcune sostituzioni in cui posso riutilizzare l'espressione regolare che fa parte della mia stringa di ricerca.

Un semplice esempio potrebbe essere una linea in cui voglio sostituire (10)a {10}, dove 10 può essere qualsiasi numero.

Sono arrivato così lontano

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

che corrisponde esattamente alla parte che voglio.

Ora la sostituzione, ho provato

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

Ma questo dà come output {(10)}

Poi ho provato

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

Tuttavia, questo mi ha dato ({10}), che ho anche chiuso, ma non quello che voglio.

Penso di aver bisogno di qualche altro tipo di marcatura / referenziazione invece di questo \0, ma non so dove cercare. Quindi la domanda è: questo può essere fatto in vim, e se sì, come?

Risposte:


37

\0è l'intera partita. Per usarne solo una parte è necessario impostarlo in questo modo e usare \ 1

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

Istruzioni più dettagliate sono disponibili qui o nella guida di Vim.


Si noti che le parentesi per l'acquisizione hanno una barra rovesciata.
Randall,

0

Di recente ho ereditato un codice legacy e volevo sostituire tutte le occorrenze come:

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

a

logging.info("xy") 

o

logging.info(x,y)

Sulla base della risposta precedente e nella speranza che qualcuno ne trarrà beneficio, ho usato il seguente comando, che cambierà tutte le occorrenze:

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

Se sostituite %con .e rimuovere /gvi ritroverete con

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

che ti consentirà di esaminare ogni partita e scegliere se cambiarla o meno.


0

Il modo migliore per consentirti di superare ogni corrispondenza è aggiungere una "c" alla fine del codice, piuttosto che andare riga per riga

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

Questo non risponde in alcun modo alla domanda originale
Bernhard,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.