Uneori folosesc :s cu o regexp complicată care poate fi sau nu corectă, sau „nu sunt sigur dacă vreau să înlocuiesc toate potrivirile.
Există vreo modalitate de a-i spune lui Vim să confirme fiecare potrivire pe care o găsește înainte de a înlocui textul?
Răspuns
Da! Folosiți steagul c pentru :substitute. Din :help substitute:
[c] Confirm each substitution. Vim highlights the matching string (with hl-IncSearch). You can type: :s_c "y" to substitute this match "l" to substitute this match and then quit ("last") "n" to skip this match <Esc> to quit substituting "a" to substitute this and all remaining matches {not in Vi} "q" to quit substituting {not in Vi} CTRL-E to scroll the screen up {not in Vi, not available when compiled without the +insert_expand feature} CTRL-Y to scroll the screen down {not in Vi, not available when compiled without the +insert_expand feature}
Exemplul de utilizare este simplu ca plăcintă:
%s/old/new/gc
Acest lucru este foarte util, dar nu știam despre asta până acum 2 săptămâni 🙂 Și este chiar disponibil în ol „vi 🙂
Sfat bonus: poate doriți să utilizați și :set nowrapscan; acest lucru împiedică Vim să se înfășoare în partea de sus când atinge partea de jos. „Am găsit că acest lucru este deosebit de util când folosesc semnalizatorul c.
Comentarii
- Aș adăuga, de asemenea, că, dacă doriți să înlocuiți toate instanțele
oldîn aceeași linie (nu doar prima apariție) ar trebui să adăugațigla sfârșitul comenzii, așa că, în total, veți avea%s/old/new/gc - Oh, da; am
set gdefaultașa că tind să uit să-l adaug în exemple @ e271p314 😅
Răspuns
În plus față de ceea ce a spus Carpetsmoker:
Setarea &incsearch (set incsearch) din Vim este cu adevărat utilă. Puteți folosiți-l împreună cu un truc util și puțin cunoscut.
Trucul este să încercați regexul dvs. complex, utilizând doar / sau . Vim va folosi setarea &incsearch pentru a afișa interactiv meciurile. Onc Ești „mulțumit de regex, poți folosi :%s//replacement pentru ca vim să folosească căutarea anterioară.
Observă modul în care partea din este necompletat (acolo unde puneți textul pentru a căuta). Dacă îl lăsați necompletat, îi spuneți lui Vim să folosească regexul de căutare anterior. Cu aceasta, puteți tasta o regex complexă cu / și puteți beneficia de toate avantajele set incsearch, apoi puteți utiliza %s//replacement pentru a executa efectiv căutarea și înlocuirea.
Dacă doriți ceva similar cu incsearch pentru comenzile :s, verificați vim-over , dar prefer doar să folosesc modul nativ Vim.
Comentarii
Răspunde
Înlocuirea mea interactivă preferată este să să căutați folosind / și să parcurgeți meciurile folosind n .
Apoi selectați potrivire utilizând g n și apoi s la înlocuiește textul cu orice îmi place .
Și repetați trecând la următoarea potrivire și apăsând .
Comentarii
- Acesta este un truc foarte frumos, deoarece este: (1) interactiv, (2) puteți merge la meciul anterior dacă ați omis din greșeală it (ceva ce nu puteți face folosind
:s/old/new/gc).
Răspuns
opțiune care vă permite să previzualizați rezultatul comenzii :s în timp ce o tastați.
Răspuns
Pentru beneficiul tuturor, incsearch a fost actualizat în vim8 pentru a afișa și previzualizarea pe măsură ce introduceți modelul
:%s/pattern/replace/și apoi apăsațiupentru anulare, puteți vedea părțile pe care Vim le-a schimbat dacă aveți activathlsearch. Și puteți înlocui acest text din nou cu^R.