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.

h-doleva; l-doprava, k-nahoru, j-dolu

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:

  1. 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.
  2. 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.

<-- predchozi  [obsah]  dalsi -->
© 1997, 1998 Pavel Satrapa