Joskus käytän :s
monimutkaisen regexp: n kanssa, joka saattaa olla väärä tai ei, tai en ”ole” varmasti haluan korvata kaikki osumat.
Voinko mitenkään kertoa Vimille, että se vahvistaa jokaisen löytämänsä ottelun ennen kuin se todella korvaa tekstin?
vastaus
Kyllä! Käytä c
-merkkiä :substitute
. Alkaen :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}
Esimerkkikäyttö on yksinkertaista kuin piirakka:
%s/old/new/gc
Tämä on erittäin hyödyllistä, mutta tiennyt tästä vasta 2 viikkoa sitten 🙂 Ja se on jopa saatavilla ol ”vi 🙂
Bonusvinkki: Voit myös käyttää :set nowrapscan
; tämä estää Vimiä käärimästä ylöspäin, kun se osuu pohjaan. Olen huomannut tämän olevan erityisen hyödyllinen käytettäessä c
-lippua.
Kommentit
- Lisään myös, että jos haluat korvata kaikki
old
-esitykset samalla rivillä (ei vain ensimmäisellä esiintymällä), sinun on lisättäväg
komennon lopussa, joten sinulla on yhteensä%s/old/new/gc
- Voi, joo; minulla on
set gdefault
joten unohdin lisätä sen esimerkkeihin @ e271p314 😅
Vastaa
Sen lisäksi, mitä Carpetsmoker sanoi:
Vimin &incsearch
(set incsearch
) -asetus on todella hyödyllinen. Voit käytä sitä yhdessä hyödyllisen ja vähän tunnetun temppun kanssa.
Temppu on kokeilla monimutkaista regexiäsi käyttämällä vain /
tai ?
-komento. Vim käyttää &incsearch
-asetusta otteluiden näyttämiseen vuorovaikutteisesti. Onc Jos olet tyytyväinen regexiin, voit käyttää :%s//replacement
-toimintoa saadaksesi VIM: n käyttämään edellistä hakua.
Huomaa, kuinka on tyhjä (sinne laitat tekstin hakuun). Jos jätät sen tyhjäksi, käsket Vimiä käyttämään edellistä hakulauseketta. Tämän avulla voit kirjoittaa monimutkaisen regex-koodin /
-palvelun avulla ja saada kaikki set incsearch
-edut ja käyttää sitten %s//replacement
-komento suorittaa haun ja korvaa sen.
Jos haluat jotain samanlaista kuin hakemisto :s
-komennoille, tarkista vim-over , mutta mieluummin käytän vain alkuperäistä Vim-tapaa.
Kommentit
Vastaa
Suosikkini vuorovaikutteinen korvike on etsiä käyttämällä / ja käydä ottelut läpi n .
Sitten valitse täsmää käyttämällä g n ja sitten s korvaa tekstin kaikilla, mistä pidän .
Ja toista siirtymällä seuraavaan otteluun ja painamalla .
Kommentit
- Tämä on erittäin hieno temppu, koska se on: (1) vuorovaikutteinen, (2) voit mennä edelliseen otteluun, jos ohitit vahingossa se (jotain, mitä et voi tehdä käyttämällä
:s/old/new/gc
).
Vastaa
-vaihtoehto, jonka avulla voit esikatsella komennon :s
tulosta kirjoittaessasi sitä.
Vastaus
Kaikkien eduksi incsearch
päivitettiin vim8: ssa näyttämään myös esikatselu kirjoittaessasi mallia
:%s/pattern/replace/
ja paina sittenu
kumoaaksesi. Näet Vimin muuttamat osat joshlsearch
on käytössä. Ja voit korvata tämän tekstin uudestaan^R
.