Rövidítések és makrók

A vi alatt lehetőség van bizonyos billentyűkhöz megadott parancsokat vagy karakterszekvenciákat rendelni. E makrók, illetve rövidítések használata adott körülmények között sok felesleges munkától és gépeléstől menthet meg minket. Rövidítéseket a :ab (abbreviation) paranccsal definiálhatunk, feloldásukat pedig a :una (unabbreviation) paranccsal érhetjük el. (A parancsok teljes nevét is végiggépelhetjük, de ekkora mazochizmust egyik olvasónkról sem tételezünk fel, kiváltképp, ha a vi sem kényszerít erre minket...:-)

:ab rövidítés kifejtés

:una rövidítés

rövidítés jelzi az általunk használt kifejezést, kifejtés pedig a vi által behelyettesített kifejezést.

:ab ux SVR4 UNIX (TM)

hatására, valahányszor a szerkesztett szövegben az ux szót leírjuk, a vi az SVR4 UNIX (TM) mintát fogja a helyére behelyettesíteni. A rövidítés feloldását az

:una ux

paranccsal érhetjük el.

Makrókat a :map és :map! parancsokkal definiálhatunk. Formátumuk a következő:

:map m makró_parancs

:map! m makró_parancs

ahol m a szóban forgó makróhoz rendelt billentyű, makró_parancs pedig maga a ténylegesen végrehajtandó makróutasítás. Az első formátum csak parancsmódban használható, azaz a vi beviteli módban nem értelmezi és fejti ki a makróutasítást. A második megadási forma esetén szövegbeviteli módban is értelmeződik a makró.

Mivel a vi az ábécé legtöbb betűjét lefoglalja parancsoknak, gyakran legalább akkora ügyességet igényel a makróhívó karakter kiválasztása, mint a makró megírása. makró_parancs írásakor vigyázzunk, hogy betűhelyesen írjuk a végrehajtandó utasításokat, épp úgy, mintha interaktívan gépelnénk be végrehajtáskor; ez többek közt azt jelenti, hogy az újsor karaktereket is meg kell adni a makróleírásban, ha a makróra tett parancsot is újsor karakterrel kell befejezni. (Ne feledjük a vezérlőkaraktereket a CTRL-V karakterrel levédeni!). Néhány példa, csak étvágygerjesztőnek (a betűhelyes megadás igénye miatt kivételesen minden leütött karaktert jelölünk):

:map CTRL-V CTRL-X !}fold -s 72 CTRL-V CTRL-M

A fenti makró a ^x karakterhez egy szövegtördelő makrót köt, ami a kurrens bekezdést a fold -s 72 paranccsal a megfelelő hosszúságú sorokra tördeli. (Mivel egy ex parancsot tettünk makróra, kell az újsor karakter a végén.)

:map t 1G!Guuencode tmp.uu

Ezt a makrót a sima t karakterhez kötöttük, hatására a kurzorral a fájl elejére megyünk, majd a végéig kijelölt részt (azaz az egész fájlt) ráengedjük az uuencode parancsra, s a kódolt változattal cseréljük le az eredetit. Vegyük észre, hogy ezzel ekvivalens (csak hosszabb) az alábbi makródefiníció:

:map t :%!uuencode tmp.uu CTRL-V CTRL-M

Végül az alábbi makró a ^a karakter hatására beszúr a fájl legelejére egy # Date: kezdetű sort, a napi dátummal:

:map CTRL-V CTRL-A 1GO# Date: CTRL-V ESC :r !date CTRL-V CTRL-M J

A fenti makró 1G hatására a fájl elejére áll, az O parancs hatására új sort szúr be a kurzor elé (tehát ez lesz az új első sor), beírja a fejrész szövegét, majd ESC karakterrel lezárja a sort (ekkor a kurzor az új sor végén áll). A :r parancs a date eredményét a kurzor utáni sorba szúrja be (a kurzor ettől még marad az első sorban), végül a J parancs segítségével a két új sort összevonjuk.

 

Tartalomjegyzék