2016-03-10 22 views
6

E 'possibile cercare un file per le occorrenze di una parola specifica e chiedere all'utente l'input per sostituire questa parola con. Ripeti la stessa operazione, inserendo una nuova sostituzione o utilizzando qualcosa della cronologia, finché tutte le parole non vengono sostituite o l'utente si chiude. Tieni presente che voglio avere la possibilità di saltare le parole che non voglio sostituire.VIM trova tutte le occorrenze e sostituisce con l'input

Usando solo

:%s/value_one/value_two/gc 

vorrebbe dire che devo eseguire questo comando per ogni sostituzione diversa che ho in mente. È possibile o c'è qualcosa di sbagliato in questo flusso di lavoro. Lo userei quando si incolla il codice boilerplate che richiede solo una variabile da modificare.

risposta

12

Siete alla ricerca di:

%s/value_one/\=input('replace <'.submatch(0).'> with: ')/gc 

:h :s\= e :h input(). Dovresti essere in grado di fornire un valore predefinito per l'input, se lo desideri.

+0

lavorato come un fascino. È esattamente quello che stavo cercando! – ExcellentAverage

+0

Potrei sbagliarmi ma non dovrebbe essere:% s/value_one/\ = input ('replace <'. Submatch (0). '> With:')/gc. La doppia barra dopo value_one mi restituisce 'E488: caratteri finali'. – ExcellentAverage

+0

Sì, certo. Hai ragione! Fisso! –

3

Questo potrebbe non essere il perfetto, Basta condividere quello che ho usato.

Si presume che :set hl sia già impostato. Premendo * cercherebbe la parola sotto il cursore. Porta il cursore sulla tua parola. Ma di solito uso gd anziché *.

Quindi, sostituirlo con ciw in parola di sostituzione. Quindi Esc. Ora possiamo passare alla prossima occorrenza per n.

Se è necessario modificare la stessa parola, premere .. In caso contrario, è possibile passare a nuovo valore utilizzando nuovamente ciw.

Se non si intende modificare l'occorrenza successiva, è sufficiente saltarlo premendo n, che richiede l'occorrenza successiva.

Questo sembra un piccolo manuale, ma ciò conferisce un controllo conservativo sulla mia modifica.

+0

Grazie per la risposta. Preferisco la risposta di Luc Hermitte perché è un po 'più elegante secondo me. Grazie per lo sforzo però – ExcellentAverage

+0

Assolutamente, nessun problema. Anche io – dlmeetei

+1

Puoi anche usare il movimento 'gn'. per esempio 'cgn' quindi' .' per ripetere (No 'n'!). Per ulteriori informazioni vedere ': h gn' e questo episodio di Vimcast: [Operando sulle corrispondenze di ricerca usando gn] (http://vimcasts.org/episodes/operating-on-search-matches-using-gn/) –

Problemi correlati