Voinko tehdä vuorovaikutteisen: korvikkeen (etsi & korvaa)?

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

  • Käytin aiemmin tämän muunnosta: Käytä vain :%s/pattern/replace/ ja paina sitten u kumoaaksesi. Näet Vimin muuttamat osat jos hlsearch on käytössä. Ja voit korvata tämän tekstin uudestaan ^R.

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

Neovimissa on myös

-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

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *