luotu 2001 · monimutkaisuusperus · versio 6.0
Vim tarjoaa :s
(korvaava) komento etsinnälle ja korvaamiselle; tämä vinkki näyttää esimerkkejä siitä, kuinka korvata. Joissakin järjestelmissä gvimillä on Etsi ja korvaa Muokkaa-valikossa (: help: promptrepl), mutta :s
-komentoa on helpompi käyttää komentorivihistoriansa ja kykynsä lisätä teksti (esimerkiksi kohdistimen alla oleva sana) haku- tai korvauskenttiin.
Perushaku ja korvaa
Komento :substitute
etsii tekstikuviota ja korvaa sen tekstimerkkijonolla. Vaihtoehtoja on monia, mutta todennäköisesti haluatkin nämä:
:s/foo/bar/g
Etsi jokainen ”foo” esiintymä (vain nykyisellä rivillä) ja korvaa se ”bar” ”.:%s/foo/bar/g
Etsi jokainen ”foo” esiintymä (kaikilla riveillä) ja korvaa se ”bar”: lla.:%s/foo/bar/gc
Vaihda jokaisesta ”foo”: sta ”bar”, mutta pyydä ensin vahvistusta.:%s/\<foo\>/bar/gc
Muuta vain kokonaiset sanat, jotka vastaavat tarkalleen sanaa ”foo” sanaksi ”bar”; pyydä vahvistusta.:%s/foo/bar/gci
Vaihda kukin ”foo” (kirjainkoon merkitsemätöni
-lipun vuoksi) palkkiin; pyydä vahvistusta.:%s/foo\c/bar/gc
on sama, koska\c
tekee hakukirjauksesta tunteeton. Tätä voidaan haluta käyttää:set noignorecase
-toiminnon avulla hakujen kirjainkoon muuttamiseksi (oletus).:%s/foo/bar/gcI
Vaihda kukin ”foo” (isot ja pienet kirjaimetI
-lipun vuoksi) palkkiin; pyydä vahvistusta.:%s/foo\C/bar/gc
on sama, koska\C
tekee hakukirjasta merkitsevää. Tätä saatetaan haluta käyttää:set ignorecase
-toiminnon avulla hakujen kirjainkoon muuttamiseksi.
Lippu g
tarkoittaa globaalia – jokainen rivin esiintymä muuttuu eikä vain ensimmäinen. Tämä vihje olettaa oletusasetuksen vaihtoehdoille "gdefault"
ja "edcompatible"
(pois päältä), mikä edellyttää, että g
-lippu sisällytetään osioon %s///g
yleisen korvaavan tuotteen suorittamiseksi. :set gdefault
-sovelluksen käyttö aiheuttaa sekaannusta, koska silloin %s///
on globaali, kun taas %s///g
ei (eli , g
muuttaa merkityksensä).
Kun käytät c
-lippua, sinun on vahvistettava jokaiselle ottelulle, mitä tehdä. Vim antaa jotain tällaista: replace with foobar (y/n/a/q/l/^E/^Y)?
(missä foobar on komennon :s/.../.../
korvaava osa. Voit kirjoittaa y
mikä tarkoittaa tämän ottelun korvaamista, n
ohittaa ottelu, a
tämän ja kaikkien jäljellä olevien otteluiden korvaamiseksi ( ”kaikki” jäljellä olevat ottelut), q
sulkeaksesi komennon, l
korvaamaan tämä ottelu ja lopettamaan (ajattele ”viimeinen”), ^E
vierittääksesi näyttöä ylöspäin pitämällä Ctrl-näppäintä painettuna ja painamalla E ja ^Y
vierittääksesi näyttöä alaspäin pitämällä Ctrl-näppäintä painettuna Y. Kaksi viimeistä vaihtoehtoa ovat kuitenkin käytettävissä vain, jos Vim on normaalisti rakennettu, iso tai valtava tai jos insert_expand-ominaisuus oli käytössä kääntöhetkellä (etsi +insert_expand
lähdöstä :version
).
Myös c
-lippua käytettäessä Vim hyppää kohtaan t hän löytää ensimmäisen ottelun, joka löytyy puskurin yläosasta, ja pyytää sinua vahvistamaan korvauksen suorittamisen kyseisessä ottelussa. Vim käyttää korostettua ryhmää IncSearch
vastaavaan tekstiin saadaksesi visuaalisen vihjeen siitä, millaista tulosta se toimii (aseta arvoon reverse
oletusarvoisesti kaikille kolmelle termityypille alkaen Vim 7.3). Lisäksi, jos löytyy useampi kuin yksi osuma ja haun korostaminen on käytössä kohdassa :set hlsearch
, Vim korostaa jäljellä olevat ottelut korosteryhmällä Search
. Jos käytät haun korostusta, varmista, että nämä kaksi korostusryhmää ovat visuaalisesti erillisiä tai et pysty kertomaan helposti, mikä ottelu Vim kehottaa sinua korvaamaan.
Tiedot
Hakualue:
Huomaa: Vim 7.3: stä alkaen korvaukset, joita käytetään merkkien tai visuaalisen valinnan määrittelemälle alueelle (joka käyttää erityyppisiä merkkejä ”< ja ”>) eivät rajoita oletusarvoisesti merkkien sarakkeiden sijaintia. Sen sijaan Vim käyttää korvausta koko rivillä, jolla kukin merkki esiintyy, ellei\%V
atomia käytetään kuviossa kuten::"<,">s/\%Vfoo/bar/g
.
Haettaessa:
.
,*
,\
,määrittää / kokoelman. Merkkialueet voidaan esittää merkillä
-
; esimerkiksi kirjain a, b, c tai numero 1 voidaan sovittaa-merkkiin. Negatiivista kokoelma siten, että
vastaa mitä tahansa merkkiä paitsi a, b, c tai 1.
\{#\}
käytetään toistamiseen./foo.\{2\}
vastaa foo: ta ja kahta seuraavaa merkkiä.\
ei vaadita sulkevalla}
, joten/foo.\{2}
tekee saman.\(foo\)
viittaa foo: iin. Sulkeet, joissa ei ole pakoa, kirjaimellisesti sovitetaan yhteen. Täällä\
vaaditaan sulkemiseen\)
.
Korvattaessa:
\r
on uusi rivi,\n
on tyhjä tavu (0x00).\&
on ampersandi (& on hakukuviota vastaava teksti).\0
lisää koko kuvion mukaisen tekstin\1
lisää ensimmäisen taustareunuksen tekstin.\2
lisää toisen taaksepäin jne.
Voit käyttää muita erotimia korvaavalla tavalla:
:s#http://www.example.com/index.html#http://example.com/#
Tallenna kirjoittaminen käyttämällä \zs
ja \ze
määrittää kuvion alku ja loppu. Esimerkiksi:
:s/Copyright 2007 All Rights Reserved/Copyright 2008 All Rights Reserved/
Käytä:
:s/Copyright \zs2007\ze All Rights Reserved/2008/
Nykyisen sanan käyttäminen tai rekisteröi
:%s//bar/g
Korvaa viimeisen hakumallin kukin osuma ”bar”: lla. Voit esimerkiksi sijoittaa kohdistimen ensin sanaanfoo
ja etsiä sitten sanaa painamalla*
. Yllä oleva korvike muuttaisi sitten kaikki sanat, jotka vastaavat tarkalleen sanaa ”foo” sanaksi ”bar”.
:%s/foo/<c-r><c-w>/g
Korvaa jokainen ”foo” esiintyminen kursorin alla olevalla sanalla.<c-r><c-w>
tarkoittaa, että painat Ctrl-R ja sitten Ctrl-W. Kursorin alla oleva sana lisätään ikään kuin kirjoittaisit sen.:%s/foo/<c-r><c-a>/g
Korvaa jokainen ”foo” esiintyminen WORD-näppäimellä kohdistimen alla (erotettu välilyönnillä).<c-r><c-a>
tarkoittaa, että painat Ctrl-R ja sitten Ctrl-A. Kohdistimen alle oleva SANA lisätään ikään kuin kirjoittaisit sen.:%s/foo/<c-r>a/g
Korvaa jokainen ”foo” esiintyminen rekisterin ”a” sisällöllä.<c-r>a
tarkoittaa, että painat Ctrl-R ja sittena
. Rekisterin ”a” sisältö lisätään kuin kirjoittaisit sen.:%s/foo/<c-r>0/g
Sama kuin yllä, käyttämällä rekisteriä 0, joka sisältää viimeisimmän yank-komennon tekstin. Esimerkkejä jenkkikomennoista ovatyi(
, joka kopioi tekstin kohdistimen ympärille sulkeisiin, jay$
, joka kopioi tekstin kohdistimesta rivin loppuun. Yank-komennon jälkeen, joka ei määritä kohderekisteriä, kopioitu teksti voidaan syöttää painamalla Ctrl-R ja sitten0
.:%s/foo/\=@a/g
Korvaa jokainen ”foo” esiintyminen rekisterin ”a” sisällöllä.\=@a
on viite ”a” -rekisteriin. Rekisterin ”a” sisältöä ei näytetä komennossa. Tästä on hyötyä, jos rekisteri sisältää useita tekstirivejä.:%s//<c-r>//g
Korvaa viimeisen hakumallin kukin osuma/
-rekisterillä (viimeinen hakumalli). Kun olet painanut Ctrl-R ja sitten/
viimeisen hakukuvion lisäämiseksi (ja ennen Enterin suorittamista komennon suorittamiseksi), voit muokata tekstiä tekemään tarvittavat muutokset.:%s/<c-r>*/bar/g
Korvaa kaikki järjestelmän leikepöydän (*
-rekisterissä) tekstin esiintymät ”barilla” (katso seuraava esimerkki, jos monirivinen) . Joissakin järjestelmissä tekstin valitseminen (Vimissä tai muussa sovelluksessa) on kaikki mitä tarvitaan tekstin sijoittamiseksi*
-rekisteriin.:%s/<c-r>a/bar/g
Korvaa kaikki rekisterin ”a” tekstin esiintymät ”bar”: lla.<c-r>a
tarkoittaa, että painat Ctrl-R ja sittena
. Rekisterin ”a” sisältö lisätään kuin kirjoittaisit sen. Kaikki rekisterin ”a” uudet rivit lisätään nimellä^M
, eikä niitä löydy. Haku toimii, jos kukin^M
korvataan manuaalisesti sanoilla \ n ”(kaksi merkkiä: taaksepäin viiva,” n ”). Tämä korvaus voidaan suorittaa, kun kirjoitat komennon::%s/<c-r>=substitute(@a,"\n","\\n","g")<CR>/bar/g
"\n"
(lainausmerkit) edustaa yhden merkin uutta riviä;"\\n"
(yksittäiset lainausmerkit) edustaa kahta takaviivaa, jota seuraa ”n
”.Toiminnonsubstitute()
arvioi lausekerekisteri<c-r>=
(Ctrl-R=
); se korvaa jokaisen uuden rivin yhdellä takaviivalla, jota seuraa ”
n
”.<CR>
osoittaa, että lopetat lausekkeen=
painamalla Enter-näppäintä.:%s/<c-r>0/bar/g
Sama kuin yllä, käyttämällä rekisteriä 0, joka sisältää viimeisimmän yank-komennon tekstin.
Katso kohtaa Rekisterien liittäminen haku- tai kaksoiskomennoihin leikepöydän käyttämisen sijaan.
Muita esimerkkejä
:%s/foo/bar/
Korvaa jokaisella rivillä ensimmäinen esiintymä ”foo” ja ”bar”.:%s/.*\zsfoo/bar/
Korvaa kullakin rivillä viimeinen ”foo” esiintyminen ”bar”: lla.:%s/\<foo\>//g
Poista jokaisella rivillä kaikki sanan ”foo” kaikki esiintymät.:%s/\<foo\>.*//
Poista jokaisella rivillä koko sana ”foo” ja kaikki seuraavat tekstit (rivin loppuun).:%s/\<foo\>.\{5}//
Poista jokaisella rivillä koko sanan ”foo” ensimmäinen esiintymä ja seuraavat viisi merkkiä.:%s/\<foo\>\zs.*//
Poista jokaisella rivillä kaikki teksti, joka seuraa koko sanaa ”foo” (rivin loppuun).:%s/.*\<foo\>//
Poista jokaisella rivillä koko sana ”foo” ja kaikki edeltävät tekstit (rivin alusta).:%s/.*\ze\<foo\>//
Poista jokaisella rivillä koko teksti ”foo” edeltävä teksti (rivin alusta).:%s/.*\(\<foo\>\).*/\1/
Poista jokaisella rivillä koko teksti ”foo” edeltävä ja seuraava teksti.:%s/\<foo\(bar\)\@!/toto/g
Korvaa jokaisella rivillä ”foo” (joka alkaa sanan ja jota ei seuraa ”palkki”) jokainen esiintymä sanalla ”toto”.:s/^\(\w\)/\u\1/
Jos vain nykyisen rivin alussa oleva ensimmäinen merkki on pieni, vaihda se isoihin kirjaimiin käyttämällä\u
(katso merkkien vaihtotapa ).:%s/\(.*\n\)\{5\}/&\r/
Lisää tyhjä rivi 5 rivin välein. Kuvio etsii sanaa\(.*\n\)
(mikä tahansa rivi ja sen rivin loppu) toistamalla viisi kertaa (\{5\}
). Korvaava on&
(löydetty teksti), jota seuraa\r
(uusi rivi).:%s/\<foo\(\a*\)\>/\=len(add(list, submatch(1)))?submatch(0):submatch(0)/g
Hae luettelo hakutuloksista. (luettelon on oltava olemassa) Asettaa lipunmodified
korvaamisen takia, mutta sisältöä ei muuteta. Huomaa: Tarpeeksi äskettäisellä Vimillä (versio 7.3.627 tai uudempi) voit yksinkertaistaa tämän seuraavasti::%s/\<foo\(\a*\)\>/\=add(list, submatch(1))/gn
Tällä on se etu, että puskuria ei merkitä muokatuksi eikä ylimääräinen kumoustila luodaan. Korvaavan osan lauseke suoritetaan hiekkalaatikossa, eikä sen saa muuttaa puskuria.
Erityistapaukset
Kun kuviot korvataan vastaavalla kirjainkokoisella tekstillä, Michael Geddes ” s säilytyslaajennusta voidaan käyttää, esimerkiksi:
:%SubstituteCase/\cHello/goodBye/g
Korvaa ”Hei hei helLo HELLO” sanalla ”Hyvästi hyvästi goodBye GOODBYE” (lohkon rivinumero), tätä pientä koodinpätkää voidaan käyttää:s/^@@ -\(\d\+\),\(\d\+\) +\(\d\+\),\(\d\+\) @@$/\="@@ -".eval(submatch(1)+offsetdiff).",".submatch(2)." +".eval(submatch(3)+offsetdiff).",".submatch(4)." @@"/g
Hyödyllinen, kun haluamme poistaa joitain lohkoja korjaustiedostosta ilman, että korjaustiedoston täytyy olla valittaa offset-eroista.
Huomaa Pitäisi yrittää tehdä lausekkeesta kompaktimpi, mutta älä tiedä miten ilman mahdollisuutta muokata ei-toivottuja viivoja.
Katso myös: korvikkeen käyttö
- 63 Korvaavien aineiden käyttäminen visuaaliseen lohkoon
- 81 Korvaa merkit ja rivit helposti
- 159 Korvaamisen ja haun näppäimistön tallentaminen
- 406 Vaihtoehtoiset erotimet korvaavalle komento
- 438 Etsi ja korvaa visuaalisessa valinnassa
- 464 Etsi ja korvaa sana kohdistimen alla
- 479 Korvaa ilman kirjoittamista
- 573 Korvikkeen toistaminen kohdistimen nykyisestä sijainnista
- 605 Korvaa sana jenkkitekstillä
- 654 Erikoismerkit korvauskomennossa
- 755 Lausekkeen käyttäminen korvauskomento
- 808 Korvaa visuaalinen tekstilohko toisella tällaisella lohkolla
- 915 g: n käyttäminen korvaavan sijasta
- 971 Korvaa kasvavilla numeroilla
- 1114 Vaihe lisää ja korvaa
- 1501 Korvaa viimeinen haku
Katso myös: korvaa puskurit / tiedostot
- 382 Haku ja korvaa useissa puskureissa
- : help: substitute
- : help cmdline-r anges
- : ohjekuvio
- : help ”gdefault”
- : help register
TO DO
suuri ”katso myös” -osio voi olla hyödyllinen lukijoille. Meidän on yhdistettävä joitain asiaan liittyviä vinkkejä (mutta älä tee tulosta liian monimutkaiseksi). Lisäsin vihjeiden numerot auttaakseni toimittajia seuraamaan.
Haluat lyhyen osan mainitsemalla, että yksinkertaiset korvaavat aineet ovat usein parhaita käsitellään etsimällä ja muuttamalla sitten manuaalisesti (ja painamalla .
toistaaksesi viimeisen muutoksen). Lisäksi voit päättää, kuinka kukin esiintymä muutetaan.Katso Kopioi tai muuta hakutekniikkaa tekniikalle, jossa voit etsiä seuraavan esiintymän painamalla n
ja kirjoittamalla sitten cs
muuttaaksesi hakuhittiä mihin tahansa.
Onko% s toiminta muuttunut viime aikoina? Jotenkin voin käyttää sekä < cr > että \ = @ korvaavina, mutta en voi käyttää niitä hauina ja korvaavina.
Jos kuvailet tarkalleen mitä teet ja mitä tapahtuu, voin auttaa, vaikka näen kysymysten esittämisen.JohnBeckett (keskustelu) 02:15, 1. kesäkuuta 2019 (UTC)