Come cercare e sostituire in più file in Vim

In questo articolo imparerai come cercare e sostituire interattivamente in molti file con solo due comandi, grazie a Vim.

Sebbene esistano una moltitudine di metodi per cercare e sostituire le parole in un singolo file, cosa fai quando hai una stringa da aggiornare su più file non correlati, tutti con nomi diversi? Sfrutta la potenza degli strumenti da riga di comando, ovviamente!

Innanzitutto, avrai bisogno di findtutti i file che desideri modificare. Mettere insieme ciò che sono effettivamente query di ricerca findè davvero limitato solo dalla tua immaginazione.

Ecco un semplice esempio che trova i file Python:

find . -name '*.py' 

Il -nametest cerca un pattern, come tutti i file che terminano con .py. Ma findpuò fare molto di più con altre condizioni di test, inclusi i -regextest. Corri find --helpper vedere la moltitudine di opzioni.

Ottimizza ulteriormente la tua ricerca utilizzando grepper ottenere solo i file che contengono la stringa che desideri modificare, ad esempio aggiungendo:

grep -le '\' 

L' -lopzione fornisce solo i nomi dei file per tutti i file contenenti un modello (indicato con -e) che corrisponde a "una balena".

Puoi anche usare l'impressionante di Vim :bufdoche ti consente di eseguire lo stesso comando su più buffer. Funziona in modo interattivo con tutti questi file senza la noia di aprire, salvare e chiudere ogni file, uno alla volta.

Colleghiamo i tuoi find+ potenti greprisultati a Vim con:

vim `find . -name '*.py' \ -exec grep -le '\' {} \;` 

Usare l'espansione backtick per passare la nostra ricerca a Vim apre più buffer pronti per l'uso. (Fai :h backtick-expansionin Vim per saperne di più.)

Ora puoi applicare il comando Vim :bufdoa tutti questi file ed eseguire azioni come la ricerca e sostituzione interattiva:

:bufdo %s/a whale/a bowl of petunias/gce 

Il gper "globale" cambierà le occorrenze del pattern su tutte le righe. La esi omettere errori se il modello non è stato trovato. L' copzione lo rende interattivo. Se ti senti sicuro, puoi ometterlo per apportare le modifiche senza rivederle tutte.

Quando hai finito di esaminare tutti i buffer, salva tutto il lavoro che hai completato con:

:bufdo wq! 

Quindi goditi la gloria del tuo tempo e dei tuoi sforzi risparmiati.