În acest articol, veți învăța cum să căutați și să înlocuiți interactiv mai multe fișiere cu doar două comenzi, datorită Vim.

În timp ce există o multitudine de metode de căutare și înlocuire a cuvintelor într-un singur fișier, ce faceți când aveți un șir de actualizat în mai multe fișiere fără legătură, toate cu nume diferite? Bineînțeles că profitați de puterea instrumentelor din linia de comandă!

Mai întâi, va trebui find toate fișierele pe care doriți să le modificați. Strângeți împreună ceea ce sunt efectiv interogările de căutare find este într-adevăr limitat doar de imaginația ta.

Iată un exemplu simplu care găsește fișiere Python:

find . -name '*.py'

-name testează căutările unui model, cum ar fi toate fișierele care se termină cu .py. Dar find poate face mult mai mult cu alte condiții de testare, inclusiv -regex teste. Alerga find --help pentru a vedea multitudinea de opțiuni.

Reglați în continuare căutarea utilizând grep pentru a obține doar fișierele care conțin șirul pe care doriți să îl modificați, cum ar fi adăugând:

grep -le '<a whale>'

-l opțiunea vă oferă doar numele fișierelor pentru toate fișierele care conțin un model (notat cu -e) care se potrivesc cu „o balenă”.

Puteți utiliza, de asemenea, impresionantul lui Vim :bufdo care vă permite să rulați aceeași comandă pe mai multe buffere. Funcționează interactiv cu toate aceste fișiere fără oboseala deschiderii, salvării și închiderii fișierelor, câte unul.

Să vă conectăm puternicul find+grep rezultă în Vim cu:

vim `find . -name '*.py' 
-exec grep -le '<a whale>' {} ;`

Folosind backtick-expansion pentru a transmite căutarea noastră către Vim, se deschid mai multe buffere gata de pornire. (Do :h backtick-expansion în Vim pentru mai multe.)

Acum puteți aplica comanda Vim :bufdo la toate aceste fișiere și efectuați acțiuni precum căutarea și înlocuirea interactivă:

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

g căci „global” va schimba aparițiile modelului pe toate liniile. e va omite erorile dacă modelul nu este găsit. c opțiunea face acest lucru interactiv. Dacă vă simțiți încrezător, îl puteți omite pentru a face modificările fără a le examina pe fiecare.

După ce ați terminat de parcurs toate bufferele, salvați toate lucrările pe care le-ați finalizat cu:

:bufdo wq!

Apoi, bucurați-vă de gloria timpului și a efortului salvat.