 |
Makra
Obvykl²m prost°edkem pro v²raznΘ zrychlenφ prßce s editorem je definice a
pou╛φvßnφ makroinstrukcφ. Dφky nim si m∙╛ete urΦitΘ Φasto opakovanΘ postupy
p°edprogramovat a pak je realizovat stiskem jednΘ Φi n∞kolika mßlo klßves.
Dob°e definovanß sada maker dokß╛e u╣et°it spoustu Φasu.
Makra na pomeranΦφch
Editor se makro zpravidla uΦφ odezφrßnφm. U╛ivatel °ekne "te∩ se dφvej" a
editor si zapamatuje sekvenci provßd∞n²ch operacφ a╛ do okam╛iku, kdy u╛ivatel
°ekne "dost". PotΘ lze zapamatovanou posloupnost operacφ kdykoli zopakovat.
V p°φpad∞ vim slou╛φ k tΘto Φinnosti p°φkaz qregistr . Jako jmΘno registru m∙╛e
vystupovat libovolnΘ malΘ pφsmeno nebo Φφslice. Editor zahßjφ re╛im nahrßvßnφ a
p°φkazy si uklßdß do uvedenΘho registru. Jakmile znovu pou╛ijete p°φkaz q (tentokrßt ji╛ bez jakΘkoli dou╣ky), nahrßvßnφ bude
ukonΦeno.
Zapamatovanou sekvenci pak m∙╛ete kdykoli zopakovat prost°ednictvφm @registr .
P°φklad:
╚asto edituji textovΘ soubory, z nich╛ vytvß°φm WWW strßnky. Tu a tam chci v
textu n∞kterΘ slovo zobrazit pφsmem psacφho stroje, co╛ v praxi znamenß p°ed n∞
vlo╛it znaΦku <CODE> a za n∞ </CODE> .
Vzhledem k nßzvu znaΦky si takovΘ makro ulo╛φm pod pφsmenem "c". Nejprve je
editor nauΦφm:
qc |
zapamatovat do registru "c" |
i<CODE>[Esc] |
vlo╛it p°ed aktußlnφ znak znaΦku <CODE> a vrßtit se
do normßlnφho re╛imu |
e |
p°esunout kurzor na konec slova |
a</CODE>[Esc] |
p°idat za aktußlnφ znak znaΦku </CODE> a vrßtit se
do normßlnφho re╛imu |
q |
ukonΦit nahrßvßnφ |
V levΘm sloupci jsou klßvesy, kter²mi vytvo°φm makro, v pravΘm pak jejich
vysv∞tlenφ. Makro p°edpoklßdß, ╛e v okam╛iku jeho vyvolßnφ stojφ kurzor na
prvnφm znaku slova. Vyvolat je kombinacφ @c .
Makro lze kdykoli pozd∞ji p°edefinovat tak, ╛e prost∞ definujete p°φslu╣n²
registr znovu. Pokud v╣ak p°φkazu q p°edßte velkΘ
pφsmeno, nebude stßvajφcφ obsah registru vymazßn a zapamatovanΘ p°φkazy budou
p°idßny na jeho konec.
Makra podle mistra kucha°e
Opravdovφ mu╛ovΘ a ╛eny v╣ak v²╣e popsan² druh maker p°φli╣ nepou╛φvajφ. Majφ k
tomu tyto d∙vody:
- Majφ dostatek p°edstavivosti na to, aby v∞d∞li, co jednotlivΘ
p°φkazy d∞lajφ a nemusφ se na n∞ b∞hem definice makra zbab∞le dφvat. To by
bylo pod jejich profesionßlnφ Φest.
- Vyvolßnφ makra vy╛aduje p°φli╣ mnoho klßves (ne╛ Φlov∞k namaΦkß zavinßΦ,
uplyne spousta Φasu) a tudφ╛ zpomaluje.
- Abeceda je p°φli╣ malß a nabφzφ jen 26 registr∙.
Syrovφ u╛ivatelΘ proto dßvajφ v∞t╣inou p°ednost klasickΘ definici maker
p°evzatΘ z p∙vodnφho vi , zde v╣ak pon∞kud vylep╣enΘ.
Jejφm zt∞lesn∞nφm je p°φkaz
:map makro v²znam
╪φkß, ╛e kdykoli v normßlnφm re╛imu pou╛ijete makro, mß se ve
skuteΦnosti provΘst sekvence p°φkaz∙, kterß byla definovßna jako jeho
v²znam. V roli makra m∙╛e vystupovat tΘm∞° libovolnß klßvesa
Φi jejich kombinace. P°i v²b∞ru v╣ak bu∩te opatrnφ, abyste si nevhodnou
definicφ makra neod°φzli p°φstup k n∞kterΘmu z d∙le╛it²ch p°φkaz∙.
╚asto chcete, aby makro bylo spou╣t∞no urΦitou specißlnφ klßvesou (klßvesou v
kombinaci s Ctrl , Alt
nebo n∞kterou funkΦnφ klßvesou). Abyste do p°φkazu vlo╛ili odpovφdajφcφ k≤d,
stiskn∞te nejprve Ctrl-V a pak k²╛enou klßvesu.
Ctrl-V toti╛ vy°adφ p°φpadn² specißlnφ v²znam
klßvesy, kterß nßsleduje za nφm.
P°φklad:
Rozhodl jsem se, ╛e klßvesovou kombinacφ Ctrl-V budu
do textu vklßdat "logo" programu vim. Jeliko╛ pracuji na HTML
strßnkßch, mß tvar <EM>vim</EM> . Odpovφdajφcφ p°φkaz
bych definoval takto:
:map ^V i<EM>vim</EM>^[
V╣imn∞te si specißlnφch znak∙ ^V a ^] . Prvnφ
symbolizuje Ctrl-V (aktivaΦnφ klßvesa makra) a
vlo╛il jsem jej klßvesovou kombinacφ Ctrl-V Ctrl-V . Druh² znak
je zt∞lesn∞nφm zßv∞reΦnΘho [Esc] , kter²m se po
vlo╛enφ nßpisu vrßtφm do normßlnφho re╛imu. Tento znak jsem vlo╛il pomocφ
Ctrl-V [Esc] .
P∙vodn∞ v╣ak Ctrl-V v normßlnφm re╛imu zahßjφ
vyznaΦovßnφ sloupcovΘho vizußlnφho bloku. O tuto
mo╛nost bych nerad p°i╣el a volba tohoto k≤du proto nenφ p°φli╣ ╣╗astnß.
Rad∞ji si vytvo°φm dvojznaky pro vklßdßnφ jednotliv²ch text∙, kter²ch
nepochybn∞ bude vφce. Odpovφdajφcφ makra budou v╛dy zahßjena funkΦnφ klßvesou
[F5] . Podle nßsledujφcφch pφsmen se pak urΦφ, kter²
text mß b²t vlo╛en. Definuji si dva: pro znaΦku 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 klßvesu, kterou zaΦφnß nßzev n∞kterΘho vφceznakovΘho makra (v
p°edchozφm p°φkladu by to byla klßvesa [F5] ),
vim nezobrazφ ╛ßdn² v²sledek a Φekß na pokraΦovßnφ. Jak postupn∞
maΦkßte dal╣φ klßvesy, kontroluje je s definicφ makra. Jakmile jmΘno odpovφdß,
provede p°φslu╣nΘ makro. Jestli╛e se v╣ak od nßzvu makra odch²lφte, provede
p°φkazy, odpovφdajφcφ stisknutΘ posloupnosti klßves. O nic tedy nep°ijdete.
Standardn∞ mß editor nastaven urΦit² interval, po kter² Φekß na dopln∞nφ makra.
Jestli╛e uplyne, ani╛ byste stiskli n∞jakou klßvesu, rezignuje na zkompletovßnφ
makra a op∞t se zachovß, jako kdyby dosud namaΦkanß kombinace klßves nebyla
zaΦßtkem makra.
Chcete-li se p°esv∞dΦit, jakß makra jsou v souΦasnΘ dob∞ definovßna, pou╛ijte
samotn² p°φkaz :map . Zajφmß-li vßs v²znam urΦitΘ
konkrΘtnφ klßvesy Φi kombinace klßves, zadejte :map makro .
O likvidaci makra se postarß :unmap makro a pokud snad chcete zru╣it narßz
v╣echny definice, pou╛ijte :mapclear .
Makra a re╛imy
V p°edchozφ Φßsti jsem si dovolil situaci pon∞kud zjednodu╣it. vim
toti╛ p°ipou╣tφ definici maker v r∙zn²ch re╛imech a podle toho se pon∞kud li╣φ
p°φkazy, kterΘ je t°eba pou╛φvat. Poznajφ se zpravidla podle p°edpony, kterß se
p°idß ke jmΘnu p°φkazu. Nßsledujφcφ tabulka uvßdφ p°ehled zßkladnφch p°φkaz∙ a
re╛imy, v nich╛ pracujφ.
P°φkaz |
Re╛im |
normßlnφ (p°φkazov²) |
vizußlnφ |
vklßdßnφ |
p°φkazov² °ßdek |
:map |
+ |
+ |
|
|
:nmap |
+ |
|
|
|
:vmap |
|
+ |
|
|
:map! |
|
|
+ |
+ |
:imap |
|
|
+ |
|
:cmap |
|
|
|
+ |
Velmi zajφmavß jsou makra ve vklßdacφm re╛imu, proto╛e jimi si m∙╛ete podstatn∞
usnadnit a zrychlit vytvß°enφ textu.
P°φklad:
Jako p°φklad uvedu jedno z m²ch HTML maker. Pou╛φval jsem je p°i psanφ t∞chto
strßnek pro vklßdßnφ informacφ o klßvesßch, kterΘ je pot°eba stisknout. Vyvolß
se klßvesou Ctrl-K ("K" jako╛to "klßvesa") a vlo╛φ
do textu °et∞zec <CODE CLASS=klavesa></CODE> .
PotΘ vrßtφ kurzor mezi ob∞ znaΦky, abych mohl ihned psßt k≤d klßvesy. Definice
makra vypadß nßsledovn∞:
:imap ^K <CODE CLASS=klavesa></CODE>^[F<i
Slo╛it∞j╣φ je makro Ctrl-Q , kterΘ dopl≥uje pßrovou
znaΦku. Pou╛φvßm je tak, ╛e napφ╣i zahajovacφ znaΦku (°ekn∞me
<STRONG> ) a potΘ stisknu Ctrl-Q .
Editor doplnφ </STRONG> a vrßtφ kurzor mezi znaΦky, abych
mohl psßt t∞lo. Definice je tato:
imap ^Q </>^[2F<lywf>f/pF<i
Editor nejprve p°ipφ╣e zßklad ukonΦujφcφ znaΦky (</> ), vrßtφ se do normßlnφho re╛imu (^[ ), p°esune se za zaΦßtek zahajujφcφ znaΦky (2F<l ), zkopφruje slovo (yw ),
p°ejde na lomφtko v ukonΦujφcφ znaΦce (f>f/ ),
vlo╛φ za n∞j zkopφrovanΘ slovo (p ), vrßtφ se na
zahajovacφ < tΘto znaΦky (F< ) a vrßtφ se zp∞t
do vklßdacφho re╛imu (i ).
© 1997, 1998 Pavel Satrapa
|