Pufferkezelés

Névtelen és nevesített pufferek

A vi a "fő" pufferen kívül, ahol a szerkesztett állományt tartja, még számos egyéb kiegészítő puffert is használ. Ezeknek elsősorban a komplexebb szövegmozgatásoknál, vagy a fájlok közti adatcserében láthatjuk hasznát.

A vi összesen 36 puffert bocsát rendelkezésünkre. Ezek között van egy névtelen, melyet automatikusan használunk minden olyan vi műveletnél, ahol valami módosult a fájlban; a változtatás által érintett, "elvesző", felülírandó szövegrészlet kerül ide. (Rövidesen látni fogjuk, hogyan nyerhetjük ki e puffer tartalmát.) A következő 9 puffert, melyekre a "n jelöléssel hivatkozhatunk (n a megfelelő puffer száma), szintén automatikusan használjuk, ugyanis ezekbe shiftelődik el a névtelen puffer tartalma minden egyes újabb puffermódosító műveletnél. Pontosabban fogalmazva, minden állománymódosítással járó parancsnál a frissen törölt szövegrész kerül a névtelen pufferba, ami eddig ott volt, az az egyesbe, és így tovább.

A maradék 26 pufferre (vagy másnéven regiszterre) a "c formulával hivatkozhatunk, ahol c az angol ábécé egy kisbetűje lehet.

A regiszterhivatkozásokat mindig az opcionális számparaméter után, de még a vi parancs előtt kell elhelyezni, így egy vi parancs legkomplexebb formája az alábbi lehet:

argumentum regiszter parancs szövegobjektum

A fentiekre mindjárt látunk példákat is.

Szövegmásolás: p és y parancs

Eddigi parancsaink közvetlen hatással voltak a szerkesztett fájlra, valamit töröltek, vagy valamit valamire cseréltek. Az alábbi parancsok a pufferkezeléssel kapcsolatosak.

yx

A y (yank) parancs hatására az x szövegobjektum a névtelen pufferbe kerül. y a d parancshoz hasonlóan működik, az egyetlen eltérés, hogy a pufferbe tett részt nem törli eredeti helyéről. x az eddig megszokott módon kijelölhető tetszőleges szövegobjektum lehet.

yy

Az aktuális sort helyezi a névtelen pufferbe.

p

A névtelen puffer tartalmát a kurzor karakter mögé szúrja be. Ha a névtelen pufferben egy vagy több teljes sor szerepel, akkor a kurzort tartalmazó sor után helyezi el őket.

P

A névtelen puffer tartalmát a kurzor karakter elé szúrja be. Ha a névtelen pufferben egy vagy több teljes sor szerepel, akkor a kurzort tartalmazó sor előtt helyezi el őket.

Ne felejtsük el, hogy a névtelen pufferbe explicit módon csak a y paranccsal pakolhatunk, viszont minden állománytörléssel járó parancs eredménye automatikusan oda kerül, esetlegesen felülírva az általunk ott elhelyezett szöveget. Célszerű ezért a yank paranccsal elhelyezett információt minél hamarabb kivenni a pufferből, vagy pedig a 26 regiszter valamelyikét használni, amelyeket az automatikus mentés nem érint.

Az alábbi példák a p és y parancsok használatát mutatják be:

xp

Két karakter cseréjére alkalmas: törli a kurzor alatti karaktert (a kurzor a következő karakterre kerül), majd a névtelen puffer tartalmát (azaz a frissen törölt karaktert) a kurzor után helyezi el. Magyarul megcseréltük a két karaktert, például amla helyett alma került a fájlba.

4y)

A kurzortól kezdve négy mondatot a névtelen pufferbe másol.

"4p

A megelőző harmadik fájlmódosítás által elvesztett szöveget a kurzor mögé helyezi.

"zd3w

A kurzortól előre 3 szót töröltünk, s a z regiszterben helyeztük el.

"zp

A z regiszter tartalmát a kurzor mögé szúrtuk be.

"ty`a

A kurzortól az a jelzőpontig kijelölt részt a t regiszterbe másolja.

Vágás-ragasztás

A jelzőpontok és regiszterek használatával szinte határtalan lehetőségek nyílnak meg előttünk, fájlok tetszőleges részeit tudjuk kijelölni, és egy paranccsal mozgatni. Nem említettük még a regisztereknek azt a nagy előnyét, hogy az egyszerre megnyitott összes fájlból elérhetőek, azaz akár fájlok közti "húzd és vidd" (drag-and-drop) műveleteket is meg tudunk valósítani, ha eléggé "fapados" módon is. Alábbi példánk ezt szemlélteti.

Tegyük fel, hogy már megnyitottuk a file1 nevű állományt, s ennek egy részét szeretnénk áthelyezni a file2 állományba, mégpedig úgy, hogy a kutya és a macska szó első előfordulásai közti részt tesszük át file2-be, a haziallatok kezdetű sor után (az alábbi parancsok természetesen sorfolytonosan gépelhetőek, csak a jobb láthatóság miatt szeparáltuk őket külön sorokba, s kivételesen külön jelöltük az újsor karaktereket):

1G/kutya/RETURN

ma

/macska/RETURN

"bd'a

:efile2RETURN

/haziallatok/RETURN

"bp

:e#RETURN

Az 1G/kutya/RETURN hatására a kurzor file1 első sorára áll, onnan megkeresi a kutya szót tartalmazó sort és rááll. Az ma parancs hatására elhelyez egy jelzőpontot ezen a soron. /macska/RETURN hatására rááll a macska szót tartalmazó sorra. "bd'a hatására törli a kurzortól az a jelzőpontig tartó szövegrészt, de a névtelen puffer helyett a b regiszterben helyezi el. :efile2RETURN hatására megnyitja file2-t is, /haziallatok/RETURN hatására rááll a haziallatok szót tartalmazó első sorra, végül "bp hatására e sor mögé beszúrja a b regiszter tartalmát. :e#RETURN hatására visszaáll file1-be, a kitörölt, macska szót tartalmazó sor utáni első sorra.

 

Tartalomjegyzék