|
Makra
Obvyklym prostredkem pro vyrazne zrychleni prace s editorem je definice a
pouzivani makroinstrukci. Diky nim si muzete urcite casto opakovane postupy
predprogramovat a pak je realizovat stiskem jedne ci nekolika malo klaves.
Dobre definovana sada maker dokaze usetrit spoustu casu.
Makra na pomerancich
Editor se makro zpravidla uci odeziranim. Uzivatel rekne "ted se divej" a
editor si zapamatuje sekvenci provadenych operaci az do okamziku, kdy uzivatel
rekne "dost". Pote lze zapamatovanou posloupnost operaci kdykoli zopakovat.
V pripade vim slouzi k teto cinnosti prikaz qregistr . Jako jmeno registru muze
vystupovat libovolne male pismeno nebo cislice. Editor zahaji rezim nahravani a
prikazy si uklada do uvedeneho registru. Jakmile znovu pouzijete prikaz q (tentokrat jiz bez jakekoli dousky), nahravani bude
ukonceno.
Zapamatovanou sekvenci pak muzete kdykoli zopakovat prostrednictvim @registr .
Priklad:
Casto edituji textove soubory, z nichz vytvarim WWW stranky. Tu a tam chci v
textu nektere slovo zobrazit pismem psaciho stroje, coz v praxi znamena pred ne
vlozit znacku <CODE> a za ne </CODE> .
Vzhledem k nazvu znacky si takove makro ulozim pod pismenem "c". Nejprve je
editor naucim:
qc |
zapamatovat do registru "c" |
i<CODE>[Esc] |
vlozit pred aktualni znak znacku <CODE> a vratit se
do normalniho rezimu |
e |
presunout kurzor na konec slova |
a</CODE>[Esc] |
pridat za aktualni znak znacku </CODE> a vratit se
do normalniho rezimu |
q |
ukoncit nahravani |
V levem sloupci jsou klavesy, kterymi vytvorim makro, v pravem pak jejich
vysvetleni. Makro predpoklada, ze v okamziku jeho vyvolani stoji kurzor na
prvnim znaku slova. Vyvolat je kombinaci @c .
Makro lze kdykoli pozdeji predefinovat tak, ze proste definujete prislusny
registr znovu. Pokud vsak prikazu q predate velke
pismeno, nebude stavajici obsah registru vymazan a zapamatovane prikazy budou
pridany na jeho konec.
Makra podle mistra kuchare
Opravdovi muzove a zeny vsak vyse popsany druh maker prilis nepouzivaji. Maji k
tomu tyto duvody:
- Maji dostatek predstavivosti na to, aby vedeli, co jednotlive
prikazy delaji a nemusi se na ne behem definice makra zbabele divat. To by
bylo pod jejich profesionalni cest.
- Vyvolani makra vyzaduje prilis mnoho klaves (nez clovek namacka zavinac,
uplyne spousta casu) a tudiz zpomaluje.
- Abeceda je prilis mala a nabizi jen 26 registru.
Syrovi uzivatele proto davaji vetsinou prednost klasicke definici maker
prevzate z puvodniho vi , zde vsak ponekud vylepsene.
Jejim ztelesnenim je prikaz
:map makro vyznam
Rika, ze kdykoli v normalnim rezimu pouzijete makro, ma se ve
skutecnosti provest sekvence prikazu, ktera byla definovana jako jeho
vyznam. V roli makra muze vystupovat temer libovolna klavesa
ci jejich kombinace. Pri vyberu vsak budte opatrni, abyste si nevhodnou
definici makra neodrizli pristup k nekteremu z dulezitych prikazu.
Casto chcete, aby makro bylo spousteno urcitou specialni klavesou (klavesou v
kombinaci s Ctrl , Alt
nebo nekterou funkcni klavesou). Abyste do prikazu vlozili odpovidajici kod,
stisknete nejprve Ctrl-V a pak kyzenou klavesu.
Ctrl-V totiz vyradi pripadny specialni vyznam
klavesy, ktera nasleduje za nim.
Priklad:
Rozhodl jsem se, ze klavesovou kombinaci Ctrl-V budu
do textu vkladat "logo" programu vim. Jelikoz pracuji na HTML
strankach, ma tvar <EM>vim</EM> . Odpovidajici prikaz
bych definoval takto:
:map ^V i<EM>vim</EM>^[
Vsimnete si specialnich znaku ^V a ^] . Prvni
symbolizuje Ctrl-V (aktivacni klavesa makra) a
vlozil jsem jej klavesovou kombinaci Ctrl-V Ctrl-V . Druhy znak
je ztelesnenim zaverecneho [Esc] , kterym se po
vlozeni napisu vratim do normalniho rezimu. Tento znak jsem vlozil pomoci
Ctrl-V [Esc] .
Puvodne vsak Ctrl-V v normalnim rezimu zahaji
vyznacovani sloupcoveho vizualniho bloku. O tuto
moznost bych nerad prisel a volba tohoto kodu proto neni prilis stastna.
Radeji si vytvorim dvojznaky pro vkladani jednotlivych textu, kterych
nepochybne bude vice. Odpovidajici makra budou vzdy zahajena funkcni klavesou
[F5] . Podle nasledujicich pismen se pak urci, ktery
text ma byt vlozen. Definuji si dva: pro znacku vim (makro [F5]v ) a svou elektronickou adresu (makro [F5]ps ):
:map <F5>v i<EM>vim</EM>^[
:map <F5>ps iPavel.Satrapa@vslib.cz^[
Stisknete-li klavesu, kterou zacina nazev nektereho viceznakoveho makra (v
predchozim prikladu by to byla klavesa [F5] ),
vim nezobrazi zadny vysledek a ceka na pokracovani. Jak postupne
mackate dalsi klavesy, kontroluje je s definici makra. Jakmile jmeno odpovida,
provede prislusne makro. Jestlize se vsak od nazvu makra odchylite, provede
prikazy, odpovidajici stisknute posloupnosti klaves. O nic tedy neprijdete.
Standardne ma editor nastaven urcity interval, po ktery ceka na doplneni makra.
Jestlize uplyne, aniz byste stiskli nejakou klavesu, rezignuje na zkompletovani
makra a opet se zachova, jako kdyby dosud namackana kombinace klaves nebyla
zacatkem makra.
Chcete-li se presvedcit, jaka makra jsou v soucasne dobe definovana, pouzijte
samotny prikaz :map . Zajima-li vas vyznam urcite
konkretni klavesy ci kombinace klaves, zadejte :map makro .
O likvidaci makra se postara :unmap makro a pokud snad chcete zrusit naraz
vsechny definice, pouzijte :mapclear .
Makra a rezimy
V predchozi casti jsem si dovolil situaci ponekud zjednodusit. vim
totiz pripousti definici maker v ruznych rezimech a podle toho se ponekud lisi
prikazy, ktere je treba pouzivat. Poznaji se zpravidla podle predpony, ktera se
prida ke jmenu prikazu. Nasledujici tabulka uvadi prehled zakladnich prikazu a
rezimy, v nichz pracuji.
Prikaz |
Rezim |
normalni (prikazovy) |
vizualni |
vkladani |
prikazovy radek |
:map |
+ |
+ |
|
|
:nmap |
+ |
|
|
|
:vmap |
|
+ |
|
|
:map! |
|
|
+ |
+ |
:imap |
|
|
+ |
|
:cmap |
|
|
|
+ |
Velmi zajimava jsou makra ve vkladacim rezimu, protoze jimi si muzete podstatne
usnadnit a zrychlit vytvareni textu.
Priklad:
Jako priklad uvedu jedno z mych HTML maker. Pouzival jsem je pri psani techto
stranek pro vkladani informaci o klavesach, ktere je potreba stisknout. Vyvola
se klavesou Ctrl-K ("K" jakozto "klavesa") a vlozi
do textu retezec <CODE CLASS=klavesa></CODE> .
Pote vrati kurzor mezi obe znacky, abych mohl ihned psat kod klavesy. Definice
makra vypada nasledovne:
:imap ^K <CODE CLASS=klavesa></CODE>^[F<i
Slozitejsi je makro Ctrl-Q , ktere doplnuje parovou
znacku. Pouzivam je tak, ze napisi zahajovaci znacku (rekneme
<STRONG> ) a pote stisknu Ctrl-Q .
Editor doplni </STRONG> a vrati kurzor mezi znacky, abych
mohl psat telo. Definice je tato:
imap ^Q </>^[2F<lywf>f/pF<i
Editor nejprve pripise zaklad ukoncujici znacky (</> ), vrati se do normalniho rezimu (^[ ), presune se za zacatek zahajujici znacky (2F<l ), zkopiruje slovo (yw ),
prejde na lomitko v ukoncujici znacce (f>f/ ),
vlozi za nej zkopirovane slovo (p ), vrati se na
zahajovaci < teto znacky (F< ) a vrati se zpet
do vkladaciho rezimu (i ).
© 1997, 1998 Pavel Satrapa
|