létrehozva 2001 · összetettség alapja · 6.0 verzió
A Vim megadja a :s
(helyettesítő) parancs keresésre és cserére; ez a tipp példákat mutat be a helyettesítésre. Bizonyos rendszerekben a gvim a Szerkesztés menüben található: Keresés és csere (: help: promptrepl), azonban a :s
parancs használata egyszerűbb a parancssori előzmények és a beszúrási képesség miatt. szöveget (például a kurzor alatti szót) a keresés vagy a helyettesítés mezőkbe.
Alapvető keresés és csere
A :substitute
parancs keres egy szövegmintát, és lecseréli azt egy szöveges karakterláncra. Számos lehetőség van, de valószínűleg ezeket szeretné:
:s/foo/bar/g
Keresse meg a “foo” minden előfordulását (csak az aktuális sorban), és cserélje le a “bar” elemre “.:%s/foo/bar/g
Keresse meg a “foo” minden előfordulását (minden sorban), és cserélje le a “bar” kifejezésre.:%s/foo/bar/gc
Minden “foo” -ot “bar” -ra változtat, de először kérjen megerősítést.:%s/\<foo\>/bar/gc
Csak a “foo” -nak pontosan megfelelő szavakat változtassa meg “bar” -ra; kérjen megerősítést.:%s/foo/bar/gci
Minden “foo” -t (ai
zászló miatt nem érzékeny a kis- és nagybetűkre) változtasson “bar” -ra; kérjen megerősítést. A:%s/foo\c/bar/gc
ugyanaz, mert a\c
érzéketlenné teszi a keresési esetet. Erre akkor lehet szükség, ha a:set noignorecase
használatával a keresések megkülönböztetik a kis- és nagybetűket (alapértelmezett).:%s/foo/bar/gcI
Minden “foo” -ot (aI
zászló miatt megkülönbözteti a kis- és nagybetűket) “bar” -ra; kérjen megerősítést. A:%s/foo\C/bar/gc
ugyanaz, mert a\C
érzékenyvé teszi a keresést. Erre akkor lehet szükség, ha a:set ignorecase
használatával érzéketlenné teszi a kereséseket.
A g
zászló globális jelentést mutat – a sorban minden előfordulás megváltozik, nem csak az első. Ez a tipp feltételezi az alapértelmezett beállítást a "gdefault"
és "edcompatible"
beállításnál (ki), amely megköveteli, hogy a g
flaget kell beilleszteni a %s///g
be a globális helyettesítés elvégzéséhez. A :set gdefault
használata zavart okoz, mert akkor a %s///
globális, míg a %s///g
nem (vagyis , g
megfordítja jelentését).
A c
zászló használatakor minden mérkőzésre meg kell erősítenie, hogy mi csinálni. A Vim olyasmit fog kiadni, mint: replace with foobar (y/n/a/q/l/^E/^Y)?
(ahol a foobar a :s/.../.../
parancs helyettesítő része. Gépelhet y
ami azt jelenti, hogy helyettesíti ezt a mérkőzést, n
hogy kihagyja ezt a mérkőzést, a
ennek és az összes többi mérkőzésnek a helyettesítésére ( “az összes” hátralévő meccs), q
a parancs kilépéséhez, l
a meccs helyettesítéséhez és kilépéshez (gondoljunk az “utolsó” kifejezésre), ^E
a képernyő felfelé görgetéséhez tartsa lenyomva a Ctrl billentyűt, majd nyomja le az E és ^Y
gombokat a képernyő lefelé görgetéséhez a Ctrl billentyű lenyomásával és a Y. Az utóbbi két lehetőség azonban csak akkor érhető el, ha a Vim normál, nagy vagy hatalmas felépítésű, vagy az insert_expand funkció fordításkor engedélyezett volt (keresse meg a kimenetben a +insert_expand
parancsot. :version
).
A c
zászló használatakor is a Vim a t-re ugrik először találja meg a puffer tetejétől kezdve, és megerősítést kér a csere végrehajtásához. A Vim a IncSearch
kiemelő csoportot alkalmazza az egyező szövegre, hogy vizuális jelzést kapjon arról, hogy melyik egyezésen működik (állítsa reverse
értékre alapértelmezés szerint mindhárom kifejezéstípusra a 7. Vim szerint). Ezenkívül, ha egynél több egyezés található, és engedélyezi a keresés kiemelését a :set hlsearch
beállítással, a Vim kiemeli a fennmaradó mérkőzéseket a Search
kiemelő csoporttal . Ha mégis keresési kiemelést használ, győződjön meg arról, hogy ez a két kiemelő csoport vizuálisan megkülönböztethető-e, különben nem fogja tudni könnyen megmondani, hogy a Vim melyik mérkőzést kéri a helyettesítésre.
Keresési tartomány:
Megjegyzés: A 7.3-as verziótól kezdve a jelölésekkel vagy vizuális kijelöléssel meghatározott tartományra alkalmazott helyettesítések (amelyek speciális típusú “< jelöléseket használnak és a “>) alapértelmezés szerint nincsenek korlátozva a jelölések oszloppozíciójával. Ehelyett a Vim alkalmazza a helyettesítést az egész sorra, amelyen az egyes jelek szerepelnek, hacsak a\%V
atomot használunk a mintában, például::"<,">s/\%Vfoo/bar/g
.
Keresés közben:
.
,*
,\
,megad egy / gyűjteményt. A karaktertartományokat egy
-
karakterrel lehet ábrázolni; például egy a, b, c betű vagy az 1-es szám megfeleltethető abetűvel. Negatívum, hogy a
bármely karakter egyezik az a, b, c vagy 1 kivételével.
\{#\}
az ismétléshez használatos. A/foo.\{2\}
megegyezik a foo-val és a következő két karakterrel. A\
nem szükséges a záró}
oldalon, ezért/foo.\{2}
ugyanazt fogja tenni. A\(foo\)
visszaemlékezik a foo-ra. A menekülés nélküli zárójelek szó szerint egyeznek. Itt a\
szükséges a\)
záráshoz.
Cserénél:
\r
újsor,\n
null bájt (0x00). A\&
ampersand (& a keresési mintának megfelelő szöveg).\0
beszúrja a teljes mintához illesztett szöveget\1
beszúrja az első háttérreferencia szövegét.\2
beszúrja a második háttérreferenciát stb.
Más elválasztókat is használhat helyettesítővel:
:s#http://www.example.com/index.html#http://example.com/#
Gépelést menthet a \zs
és a \ze
a minta kezdetének és végének beállításához. Például:
:s/Copyright 2007 All Rights Reserved/Copyright 2008 All Rights Reserved/
Használja:
:s/Copyright \zs2007\ze All Rights Reserved/2008/
Az aktuális szó használata vagy regisztrál
:%s//bar/g
Az utolsó keresési minta minden egyezését cserélje le “bar” -ra. Például először helyezze a kurzort a
foo
szóra, majd nyomja meg a*
szót a szó kereséséhez. A fenti helyettesítő ekkor az összes szót, amely pontosan megfelel a “foo” -nak, “bar” -ra változtatja.:%s/foo/<c-r><c-w>/g
Cserélje le a “foo” minden előfordulását a kurzor alatti szóra. A<c-r><c-w>
azt jelenti, hogy megnyomja a Ctrl-R, majd a Ctrl-W billentyűkombinációt. A kurzor alatti szó úgy lesz beillesztve, mintha beírta volna.:%s/foo/<c-r><c-a>/g
Cserélje le a “foo” minden előfordulását a kurzor alatti szóra (szóközzel határolva). A<c-r><c-a>
azt jelenti, hogy megnyomja a Ctrl-R, majd a Ctrl-A billentyűkombinációt. A kurzor alatti szó beillesztésre kerül, mintha beírta volna.:%s/foo/<c-r>a/g
Cserélje le a “foo” minden előfordulását az “a” regisztráció tartalmára. A<c-r>a
azt jelenti, hogy megnyomja a Ctrl-R billentyűt, majda
. Az “a” regiszter tartalma úgy kerül beillesztésre, mintha beírta volna.:%s/foo/<c-r>0/g
Ugyanaz, mint fent, a 0 regiszter használatával, amely a legutóbbi yank parancs szövegét tartalmazza. A yank (copy) parancsokra példák:yi(
, amely a kurzor körül zárójelben lévő szöveget másolja, és ay$
, amely a szöveget a kurzorról másolja. a sor végéig. Egy olyan rángatózó parancs után, amely nem adott meg célregisztert, a másolt szöveg a Ctrl-R, majd a0
megnyomásával írható be.:%s/foo/\=@a/g
Cserélje le a “foo” minden előfordulását az “a” regisztráció tartalmára. Az\=@a
hivatkozás az “a” regisztrációra. Az “a” regiszter tartalma nem jelenik meg a parancsban. Ez akkor hasznos, ha a regiszter sok soros szöveget tartalmaz.:%s//<c-r>//g
Cserélje le az utolsó keresési minta minden egyezését a/
regiszterre (az utolsó keresési minta). Miután megnyomta a Ctrl-R billentyűt, majd/
az utolsó keresési minta beszúrásához (és mielőtt az Enter billentyűt lenyomta a parancs végrehajtásához), szerkeszthette a szöveget a szükséges változtatások végrehajtása érdekében.:%s/<c-r>*/bar/g
Cserélje le a rendszer összes vágólapjának szövegét (a*
regiszterben) “bar” -ra (lásd a következő példát, ha többsoros) . Egyes rendszereken csak a szöveg kiválasztása (a Vimben vagy egy másik alkalmazásban) szükséges ahhoz, hogy a szöveget a*
regiszterbe helyezhesse.:%s/<c-r>a/bar/g
Cserélje le az “a” regiszterben szereplő szöveg minden előfordulását “bar” -ra. A<c-r>a
azt jelenti, hogy megnyomja a Ctrl-R billentyűt, majda
. Az “a” regiszter tartalma úgy kerül beillesztésre, mintha beírta volna. Az “a” regiszterben szereplő minden új sor^M
néven kerül beillesztésre, és nem található. A keresés akkor működik, ha az egyes
^M
elemeket manuálisan kicseréljük “\ n” -re (két karakter: visszavonás, “n”). Ez a helyettesítés a következő parancs beírásakor hajtható végre::%s/<c-r>=substitute(@a,"\n","\\n","g")<CR>/bar/g
A"\n"
(dupla idézőjelek) az egyetlen karakteres új sort jelöli; az"\\n"
(egyes idézőjelek) két visszavonást jelent, amelyet “n
” követ.Asubstitute()
függvényt a<c-r>=
(Ctrl-R=
) kifejezésregiszter értékeli; minden új sort egyetlen visszavonással helyettesít, amelyet “n
” követ. Az<CR>
azt jelzi, hogy az Enter megnyomásával befejezi a=
kifejezést.:%s/<c-r>0/bar/g
Ugyanaz, mint fent, a 0 regiszter használatával, amely a legutóbbi rángatózó parancs szövegét tartalmazza.
Lásd: Regiszterek beillesztése keresési vagy kettőspontos parancsokba a vágólap használata helyett.
További példák
:%s/foo/bar/
Minden sorban cserélje le az első előfordulást. “foo” és “bar”.:%s/.*\zsfoo/bar/
Minden sorban cserélje le a “foo” utolsó előfordulását a “bar” szóra.:%s/\<foo\>//g
Minden sorban törölje a “foo” szó összes előfordulását.:%s/\<foo\>.*//
Minden sorban törölje a “foo” szót és az összes következő szöveget (a sor végéig).:%s/\<foo\>.\{5}//
Minden sorban törölje a “foo” szó első előfordulását és az azt követő öt karaktert.:%s/\<foo\>\zs.*//
Minden sorban törölje az összes szöveget, a teljes “foo” szó után (a sor végéig).:%s/.*\<foo\>//
Minden sorban törölje a “foo” szót és az azt megelőző összes szöveget (a sor elejétől).:%s/.*\ze\<foo\>//
Minden sorban törölje az egész szöveget, amely megelőzi a “foo” szót (a sor elejétől).:%s/.*\(\<foo\>\).*/\1/
Minden sorban törölje az egész szöveget, amely a “foo” szó előtt és után következik.:%s/\<foo\(bar\)\@!/toto/g
Minden sorban cserélje le a “foo” (amely egy szót kezd és nem követi a “bar”) minden előfordulását “toto” -val.:s/^\(\w\)/\u\1/
Ha az aktuális sor elején az első karakter csak kisbetű, váltsa át nagybetűre a\u
használatával (lásd a karakterek váltási esetét) ).:%s/\(.*\n\)\{5\}/&\r/
Helyezzen be egy üres sort 5 soronként. A minta ötször megismétli az\(.*\n\)
(bármely vonal, beleértve a sor végét is) keresést (\{5\}
). A helyettesítés&
(a megtalált szöveg), majd\r
(új sor).:%s/\<foo\(\a*\)\>/\=len(add(list, submatch(1)))?submatch(0):submatch(0)/g
A keresési eredmények listájának lekérése. (a listának léteznie kell) Beállítja azmodified
jelölőt a csere miatt, de a tartalom változatlan. Megjegyzés: Egy elég friss Vim (7.3.627 vagy újabb verzió) esetén ezt leegyszerűsítheti::%s/\<foo\(\a*\)\>/\=add(list, submatch(1))/gn
Ennek az az előnye, hogy a puffert nem jelölik módosítottként és nem extra visszavonási állapot jön létre. A csere részben lévő kifejezés a homokozóban fut, és nem engedélyezi a puffer módosítását.
Különleges esetek
A minták megfelelő kis- és nagybetű érzékeny szöveggel történő helyettesítésére Michael Geddes ” A keepcase plugin használható, például:
:%SubstituteCase/\cHello/goodBye/g
A “Hello hello helLo HELLO” helyett “Goodbye goodbye goodBye GOODBYE”
A patch fájlban az eltolások megváltoztatásához (egy blokk sorszáma), ez a kis részlet használható:
s/^@@ -\(\d\+\),\(\d\+\) +\(\d\+\),\(\d\+\) @@$/\="@@ -".eval(submatch(1)+offsetdiff).",".submatch(2)." +".eval(submatch(3)+offsetdiff).",".submatch(4)." @@"/g
Hasznos, ha néhány blokkot le akarunk vetni egy javításról, anélkül, hogy javításra lenne szükség panaszkodjon az eltolódási különbségekre.
Megjegyzés: Próbáljon kompaktabbá tenni a kifejezést, de ne tudja, hogyan, anélkül, hogy lehetősége lenne a nem kívánt sorok módosítására.
Lásd még: helyettesítő használata
- 63 Helyettesítők alkalmazása vizuális blokkra
- 81 Karakterek és sorok egyszerű helyettesítése
- 159 Billentyűleütés mentése Helyettesítés és keresés
- 406 Alternatív elválasztók a helyettesítéshez parancs
- 438 Keresés és csere vizuális kijelölésben
- 464 Keresse meg és cserélje ki a kurzor alatti szót
- 479 Csere gépelés nélkül
- 573 Helyettesítő ismétlése a kurzor aktuális helyzetéből
- 605 Cseréljen szót egy rángatott szövegre
- 654 Speciális karakterek a helyettesítő parancsban
- 755 Kifejezés használata helyettesítő parancs
- 808 A szöveg vizuális blokkjának cseréje egy másik ilyen blokkra
- 915 g használata helyettesítés helyett
- 971 Helyettesítés növekvő számokkal
- 1114 lépés növekmény és cseréje
- 1501 Helyettesítse az utolsó keresést
Lásd még: helyettesítés a pufferekben / fájlokban
- 382 Keresés és cserélje le több pufferben
- : help: helyettesítés
- : help cmdline-r anges
- : súgóminta
- : help “gdefault”
- : help regiszterek
TO DO
a nagy “lásd még” szakasz hasznos lehet az olvasók számára. Össze kell egyesítenünk néhány kapcsolódó tippet (de ne tegyük túl bonyolulttá az eredményt). A tippszámokat felvettem a szerkesztők nyomon követésére.
Szeretne egy rövid szakaszt, amelyben megemlíti, hogy gyakran az egyszerű helyettesítők a legjobbak a kereséssel, majd a manuális változtatással kezelhető (és a .
megnyomásával megismételheti az utolsó változtatást). Ezenkívül eldöntheti az egyes példányok módosításának módját.Lásd: Olyan technika keresési találatának másolása vagy módosítása, ahol a n
gomb megnyomásával megtalálhatja a következő példányt, majd a cs
parancsot a keresési találat módosításához. bármihez.
Nemrég történt változás a% s működésével kapcsolatban? Valahogy mind a < cr >, mind a \ = @ -t helyettesítőként használhatom, de nem használhatom őket keresésként és helyettesítésként.
Ha pontosan leírja, mit csinál és mi történik, akkor talán tudok segíteni, bár látom a kérdéseket. JohnBeckett (vita) 02:15, 2019. június 1., UTC