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țig
la sfârșitul comenzii, așa că, în total, veți avea%s/old/new/gc
- Oh, da; am
set gdefault
aș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țiu
pentru 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
.