Pot face un interactiv: substitut (căutare & substitut)?

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ți g 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

  • Obișnuiam să folosesc o variantă a acestui lucru: Folosiți doar :%s/pattern/replace/ și apoi apăsați u pentru anulare, puteți vedea părțile pe care Vim le-a schimbat dacă aveți activat hlsearch. Și puteți înlocui acest text din nou cu ^R.

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

În Neovim există și

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *