 |
Pohyby v textu
vim nabφzφ velmi ╣irok² sortiment p°φkaz∙ pro pohyby v textu.
Samoz°ejm∞ nemß smysl sna╛it si je v╣echny vsoukat do hlavy hned zpoΦßtku.
ZaΦn∞te se skromn∞j╣φ kolekcφ a sna╛te se ji postupn∞ rozhoj≥ovat.
SvΘho Φasu jsem se domnφval, ╛e v∙bec nemß smysl zat∞╛ovat si hlavu myrißdou
nejr∙zn∞j╣φch pohybov²ch p°φkaz∙. Nap°φklad takovß }
vßs p°esune na konec odstavce. No b≤╛e, to je toho! StaΦφ pßr pohyb∙ o °ßdek
dol∙ a dostanu se tam takΘ. Vtip spoΦφvß v tom, ╛e vim dovede
zkombinovat libovoln² pohybov² p°φkaz s p°φkazem editaΦnφm (podrobn∞ji o tom
pohovo°φm v Φßsti o editaci textu). V²sledkem je, ╛e
bych lφbal nohy tomu, kdo vymyslel, ╛e pravß slo╛enß zßvorka mne p°esune na
konec odstavce, proto╛e dφky nφ mohu zcela trivißln∞ pouh²mi dv∞ma znaky
odstavec vymazat, p°eformßtovat Φi zkopφrovat do vyrovnßvacφ pam∞ti. A to jsou
operace, kterΘ pot°ebuji velmi Φasto.
Zßkladnφ pohyby
Pohyby v╛dy vychßzejφ z normßlnφho re╛imu. Zßkladnφ Φtve°ice samoz°ejm∞
umo╛≥uje posunout se o jeden znak doleva, doprava, nahoru a dol∙. V ka╛dΘm
slu╣nΘm editoru tuto funkci zabezpeΦujφ kurzorovΘ klßvesy. Ve vim ji
majφ na starosti klßvesy h , l , k a
j .
Te∩ se pravd∞podobn∞ domnφvßte, ╛e auto°i vim se ude°ili hlavou o
futro nebo je postihlo n∞co daleko hor╣φho. Nßm pam∞tnφk∙m to trochu p°ipomφnß
ovlßdßnφ her pro ZX Spectrum. Pro zmφn∞nou obludnost v╣ak existujφ dva
rozumnΘ d∙vody:
- Ovlßdßnφ je p°evzato z editoru vi, kter² vznikal v dob∞, kdy
K. Kurzor je╣t∞ chodil po houbßch a zdaleka ne ka╛d² terminßl opl²val
po n∞m pojmenovan²mi klßvesami.
- LidΘ, pφ╣φcφ na rozdφl ode mne v╣emi deseti, nemusejφ p°est∞hovßvat ruce
ze zßkladnφ klßvesnice a zoufale se tak brzdit.
A abych vßs uklidnil je╣t∞ vφce: jen zcela v²jimeΦn∞ se ocitnete v situaci, kdy
byste skuteΦn∞ museli tyto klßvesy pou╛φvat (pokud nechcete). V∞t╣ina modernφch
poΦφtaΦ∙, terminßl∙ a jejich emulßtor∙ toti╛ mß stejnΘ funkce i na obvykl²ch
kurzorov²ch klßvesßch. M∙╛ete tedy pracovat tak, jak jste zvyklφ.
Druh²m nejΦast∞j╣φm pohybem je posun o jednu obrazovku. Ten ve vim
zajistφ klßvesovΘ kombinace Ctrl-F (sm∞rem dol∙) a
Ctrl-B (vzh∙ru). V n∞kter²ch implementacφch m∙╛ete
pro tyto pohyby pou╛φvat i obvyklΘ klßvesy [PageDown] a [PageUp] .
Opakovßnφ p°φkaz∙
Ne╛ se pustφm do podrobn∞j╣φho pitvßnφ nejr∙zn∞j╣φch pohybov²ch kreacφ, dovolφm
si upozornit na jednu velmi d∙le╛itou v∞c. TΘm∞° v╣echny p°φkazy vim
lze provßd∞t opakovan∞. Pokud nejprve napφ╣ete Φφslo n a po n∞m urΦit²
p°φkaz, bude proveden n-krßt. Nap°φklad pohyb o 20 znak∙ doleva
by zajistil p°φkaz 20h . Opakovat lze zkuteΦn∞
prakticky v╣echno, vΦetn∞ v∞cφ dosti komplikovan²ch.
P°φklad:
vim je ideßlnφ nßstroj pro neposlu╣nΘ ╛ßky. Majφ-li 100krßt napsat
"Nemßm vyru╣ovat p°i vyuΦovßnφ.", staΦφ zadat
100oNemßm vyru╣ovat p°i vyuΦovßnφ.[Esc]
Pohyby na °ßdku
V rßmci jednoho °ßdku mßte k dispozici n∞kolik p°φkaz∙, posouvajφcφch kurzor na
urΦenΘ pozice. Nejprve si vezm∞me extrΘmy:
0 |
na zaΦßtek °ßdku (n∞kdy i [Home] ) |
^ |
na prvnφ neprßzdn² znak °ßdku |
$ |
na konec °ßdku (n∞kdy i [End] |
Znaky ^ a $ jsou v Unixu standardn∞ pou╛φvßny pro
oznaΦovßnφ zaΦßtku a konce. Jejich v²skyt zde by vßs proto nem∞l p°ekvapit.
P°φkazy 0 a ^ se od sebe li╣φ na °ßdcφch, kterΘ
zaΦφnajφ skupinou mezer Φi tabulßtor∙. 0 vßs p°esune ne
prvnφ znak bez ohledu na jeho hodnotu. Naproti tomu ^ zp∙sobφ
p°esun na prvnφ viditeln² (r∙zn² od mezery a tabulßtoru) znak.
Hodlßte-li p°eskoΦit na urΦit² sloupec, pou╛ijte klßvesu | . P°ed nφ musφte uvΘst Φφslo po╛adovanΘho sloupce. Bez
n∞j vßs p°esune do sloupce Φφslo 1. P°esun do dvanßctΘho sloupce zajistφ
12| .
Jistou zvlß╣tnostφ je vyhledßvßnφ urΦitΘho znaku na °ßdku. Hledß se v╛dy od
pozice kurzoru sm∞rem vp°ed Φi vzad (podle p°φkazu) a pouze na aktußlnφm °ßdku.
P°φkaz je v╛dy nßsledovßn znakem, kter² mß b²t nalezen. K dispozici mßte
nßsledujφcφ:
fznak |
na nßsledujφcφ v²skyt znaku |
Fznak |
na p°edchozφ v²skyt znaku |
tznak |
p°ed nßsledujφcφ v²skyt znaku |
Tznak |
za p°edchozφ v²skyt znaku |
; |
opakuje poslednφ hledßnφ na °ßdku |
, |
opakuje poslednφ hledßnφ na °ßdku, ale v opaΦnΘm sm∞ru |
Rozdφl mezi f a t spoΦφvß
v tom, ╛e f se zastavφ a╛ na hledanΘm znaku, zatφmco
t o jednu pozici p°ed nφm. Malß pφsmena se od
velk²ch li╣φ sm∞rem - malß hledajφ vp°ed, velkß vzad. Chovßnφ bude
nejlep╣φ demonstrovat na p°φkladu:
P°φklad:
Vyjd∞me z nßsledujφcφho textu (pozice kurzoru je vyznaΦena ╣ipkou):
Marie si vyrazila do m∞sta.
^
P°φkaz fa posune kurzor takto:
Marie si vyrazila do m∞sta.
^
zatφmco ta jen o jednu pozici mΘn∞:
Marie si vyrazila do m∞sta.
^
Zopakujeme-li toto poslednφ hledßnφ klßvesou ; ,
dostaneme:
Marie si vyrazila do m∞sta.
^
A v protism∞ru z tΘto pozice dß Fs
Marie si vyrazila do m∞sta.
^
zatφmco Ts op∞t zastavφ d°φve:
Marie si vyrazila do m∞sta.
^
Pohyby mezi °ßdky
Ty nejb∞╛n∞j╣φ ji╛ byly °eΦeny - kurzorovΘ klßvesy nahoru a dol∙ a pohyby
o celou obrazovku. Poznamenßm jen, ╛e vim se sna╛φ p°i posunu na
sousednφ °ßdek udr╛ovat kurzor ve stejnΘm sloupci. Je-li n∞kter² °ßdek krat╣φ,
posune kurzor na jeho poslednφ znak. Pokud se nßsledujφcφ °ßdek op∞t prodlou╛φ,
vrßtφ se do p∙vodnφho sloupce.
Klßvesy + a - vßs taktΘ╛
posunou na nßsledujφcφ resp. p°edchozφ °ßdek. Kurzor se v╣ak p°emφstφ na jeho
prvnφ neprßzdn² znak.
Pro dßlkovΘ p°esuny m∙╛ete pou╛φt p°φkaz G . P°ed nφm
zadejte Φφslo a vim vßs p°enese na °ßdek danΘho Φφsla. Nap°φklad skok
na osmßct² °ßdek souboru obstarß 18G . Pokud
neuvedete Φφslo, ocitnete se na konci souboru.
Zajφmavou mo╛nost zt∞les≥uje % . Udßvß po╛adovanou
pozici v procentech z celkovΘ velikosti souboru (p°esn∞ji °eΦeno z poΦtu jeho
°ßdk∙). Pokud se tedy chcete p°esunout na prost°ednφ °ßdek textu, staΦφ zadat
50% .
LogickΘ poskoky
V╣echny dosavadnφ pohybovΘ p°φkazy pracovaly s fyzick²mi jednotkami, jako je
sloupec, znak, °ßdek Φi obrazovka. vim nabφzφ krom∞ nich i p°esuny
podle logick²ch kategoriφ - o slovo, v∞tu Φi odstavec.
Pro posuny o slovo slou╛φ nßsledujφcφ skupina p°φkaz∙:
w ,
W |
na zaΦßtek nßsledujφcφho slova |
e ,
E |
na konec tohoto slova |
b ,
B |
na nejbli╛╣φ p°edchozφ zaΦßtek slova |
Rozdφl mezi mal²mi a velk²mi pφsmeny p°i jednotliv²ch pohybech spoΦφvß v tom,
jak se interpretuje slovo. Pro malß pφsmena (w ,
e , b ) je za slovo
pova╛ovßna souvislß posloupnost pφsmen, Φφslic a podtr╛φtek nebo souvislß
posloupnost ostatnφch neprßzdn²ch znak∙. Proto bude °et∞zec
"ahoj. " pova╛ovßn za dv∞ slova - prvnφ je tvo°eno pφsmeny
slova "ahoj", druhΘ teΦkou.
P°i pou╛itφ velkΘho pφsmene (W , E , B ) je za slovo pova╛ovßna
posloupnost neprßzdn²ch znak∙. V tomto p°φpad∞ by tedy °et∞zec "ahoj." byl
pova╛ovßn za jedno slovo, proto╛e neobsahuje mezeru.
P°φklad:
Vyjd∞me z tΘto situace (pozici kurzoru vyznaΦuje ╣ipka):
Jede vlak, ale nßkladnφ.
^
P°φkazem w se kurzor p°esune na Φßrku za slovem
"vlak". Naproti tomu W jej posune a╛ na prvnφ
pφsmeno slova "ale".
Po provedenφ 3e se ocitneme na pφsmeni "e",
ukonΦujφcφm "ale". Prvnφ e toti╛ postrΦφ kurzor na
"k", druhΘ na konec "slova" tvo°enΘho Φßrkou a t°etφ na konec "ale".
Naproti tomu 2b z p∙vodnφ pozice p°emφstφ kurzor na
prvnφ znak v∞ty. 2B mß stejn² v²znam.
Je╣t∞ zajφmav∞j╣φ jsou posuny po v∞t╣φch celcφch. Nap°φklad ) p°esune kurzor na zaΦßtek nejbli╛╣φ nßsledujφcφ v∞ty.
P°itom za konec v∞ty je poΦφtßn znak ".", "!" nebo "?" nßsledovan² mezerou Φi
koncem °ßdku. Chcete-li se vrßtit na nejbli╛╣φ p°edchozφ zaΦßtek v∞ty, pou╛ijte
( .
Za konec odstavce je pova╛ovßn prßzdn² °ßdek. P°φkaz } vßs p°emφstφ za n∞jbli╛╣φ nßsledujφcφ konec odstavce,
zatφmco { p°ed nejbli╛╣φ p°edchßzejφcφ. Smazat t°i
odstavce (od aktußlnφ pozice kurzoru sm∞rem dol∙) tedy m∙╛ete pomocφ 3d} .
Poslednφ ze zßkladnφch pohyb∙ je velmi cenn² p°i hledßnφ nesrovnalostφ v
zßvorkovßnφ. Pomocφ p°φkazu % se m∙╛ete p°esunout na
odpovφdajφcφ pßrovou konstrukci. Za pßrovΘ jsou p°itom pova╛ovßny v╣echny t°i
typy zßvorek ( ...) , [ ...] , { ...} , komentß°ovΘ dvojznaky
podle konvencφ jazyka C /* ...*/ a instrukce
makroprocesoru #if , #ifdef , #else ,
#elif a #endif . P°i hledßnφ pßrovΘho prvku se
samoz°ejm∞ berou v ·vahu p°φpadnΘ vno°enΘ konstrukce, tak╛e se najde skuteΦn∞
ta zßvorka (Φi jin² prvek), kterß je pßrovß k tΘ pod kurzorem.
P°φklad:
Pokud v situaci
( ( ) ( () () ) )
^
pou╛ijete % , ocitnete se zde:
( ( ) ( () () ) )
^
Kdy╛ nynφ znovu stisknete % , vrßtφ se kurzor na
p∙vodnφ pozici.
Pov╣imn∞te si dvojakosti p°φkazu % . Pokud mu
p°edchßzelo Φφslo, p°esune vßs na °ßdek, vzdßlen² o uveden² poΦet procent od
zaΦßtku textu. Jestli╛e jste p°ed nφm ╛ßdnΘ Φφslo nezadali, p°eskoΦφ na pßrovou
zßvorku. Kdy╛ v tomto okam╛iku nestojφ na ╛ßdnΘ z v²╣e uveden²ch pßrov²ch
konstrukcφ, neud∞lß nic.
© 1997, 1998 Pavel Satrapa
|