Pohyby v textu

vim nabizi velmi siroky sortiment prikazu pro pohyby v textu. Samozrejme nema smysl snazit si je vsechny vsoukat do hlavy hned zpocatku. Zacnete se skromnejsi kolekci a snazte se ji postupne rozhojnovat.

Sveho casu jsem se domnival, ze vubec nema smysl zatezovat si hlavu myriadou nejruznejsich pohybovych prikazu. Napriklad takova } vas presune na konec odstavce. No boze, to je toho! Staci par pohybu o radek dolu a dostanu se tam take. Vtip spociva v tom, ze vim dovede zkombinovat libovolny pohybovy prikaz s prikazem editacnim (podrobneji o tom pohovorim v casti o editaci textu). Vysledkem je, ze bych libal nohy tomu, kdo vymyslel, ze prava slozena zavorka mne presune na konec odstavce, protoze diky ni mohu zcela trivialne pouhymi dvema znaky odstavec vymazat, preformatovat ci zkopirovat do vyrovnavaci pameti. A to jsou operace, ktere potrebuji velmi casto.

Zakladni pohyby

Pohyby vzdy vychazeji z normalniho rezimu. Zakladni ctverice samozrejme umoznuje posunout se o jeden znak doleva, doprava, nahoru a dolu. V kazdem slusnem editoru tuto funkci zabezpecuji kurzorove klavesy. Ve vim ji maji na starosti klavesy h, l, k a j.

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

Ted se pravdepodobne domnivate, ze autori vim se uderili hlavou o futro nebo je postihlo neco daleko horsiho. Nam pametnikum to trochu pripomina ovladani her pro ZX Spectrum. Pro zminenou obludnost vsak existuji dva rozumne duvody:

  1. Ovladani je prevzato z editoru vi, ktery vznikal v dobe, kdy K. Kurzor jeste chodil po houbach a zdaleka ne kazdy terminal oplyval po nem pojmenovanymi klavesami.
  2. Lide, pisici na rozdil ode mne vsemi deseti, nemuseji prestehovavat ruce ze zakladni klavesnice a zoufale se tak brzdit.
A abych vas uklidnil jeste vice: jen zcela vyjimecne se ocitnete v situaci, kdy byste skutecne museli tyto klavesy pouzivat (pokud nechcete). Vetsina modernich pocitacu, terminalu a jejich emulatoru totiz ma stejne funkce i na obvyklych kurzorovych klavesach. Muzete tedy pracovat tak, jak jste zvykli.

Druhym nejcastejsim pohybem je posun o jednu obrazovku. Ten ve vim zajisti klavesove kombinace Ctrl-F (smerem dolu) a Ctrl-B (vzhuru). V nekterych implementacich muzete pro tyto pohyby pouzivat i obvykle klavesy [PageDown] a [PageUp].

Opakovani prikazu

Nez se pustim do podrobnejsiho pitvani nejruznejsich pohybovych kreaci, dovolim si upozornit na jednu velmi dulezitou vec. Temer vsechny prikazy vim lze provadet opakovane. Pokud nejprve napisete cislo n a po nem urcity prikaz, bude proveden n-krat. Napriklad pohyb o 20 znaku doleva by zajistil prikaz 20h. Opakovat lze zkutecne prakticky vsechno, vcetne veci dosti komplikovanych.

Priklad:
vim je idealni nastroj pro neposlusne zaky. Maji-li 100krat napsat "Nemam vyrusovat pri vyucovani.", staci zadat
100oNemam vyrusovat pri vyucovani.[Esc]

Pohyby na radku

V ramci jednoho radku mate k dispozici nekolik prikazu, posouvajicich kurzor na urcene pozice. Nejprve si vezmeme extremy:

0 na zacatek radku (nekdy i [Home])
^ na prvni neprazdny znak radku
$ na konec radku (nekdy i [End]

Znaky ^ a $ jsou v Unixu standardne pouzivany pro oznacovani zacatku a konce. Jejich vyskyt zde by vas proto nemel prekvapit. Prikazy 0 a ^ se od sebe lisi na radcich, ktere zacinaji skupinou mezer ci tabulatoru. 0 vas presune ne prvni znak bez ohledu na jeho hodnotu. Naproti tomu ^ zpusobi presun na prvni viditelny (ruzny od mezery a tabulatoru) znak.

Hodlate-li preskocit na urcity sloupec, pouzijte klavesu |. Pred ni musite uvest cislo pozadovaneho sloupce. Bez nej vas presune do sloupce cislo 1. Presun do dvanacteho sloupce zajisti 12|.

Jistou zvlastnosti je vyhledavani urciteho znaku na radku. Hleda se vzdy od pozice kurzoru smerem vpred ci vzad (podle prikazu) a pouze na aktualnim radku. Prikaz je vzdy nasledovan znakem, ktery ma byt nalezen. K dispozici mate nasledujici:

fznak na nasledujici vyskyt znaku
Fznak na predchozi vyskyt znaku
tznak pred nasledujici vyskyt znaku
Tznak za predchozi vyskyt znaku
; opakuje posledni hledani na radku
, opakuje posledni hledani na radku, ale v opacnem smeru

Rozdil mezi f a t spociva v tom, ze f se zastavi az na hledanem znaku, zatimco t o jednu pozici pred nim. Mala pismena se od velkych lisi smerem - mala hledaji vpred, velka vzad. Chovani bude nejlepsi demonstrovat na prikladu:

Priklad:
Vyjdeme z nasledujiciho textu (pozice kurzoru je vyznacena sipkou):
Marie si vyrazila do mesta.
    ^ 
Prikaz fa posune kurzor takto:
Marie si vyrazila do mesta.
            ^
zatimco ta jen o jednu pozici mene:
Marie si vyrazila do mesta.
           ^
Zopakujeme-li toto posledni hledani klavesou ;, dostaneme:
Marie si vyrazila do mesta.
               ^
A v protismeru z teto pozice da Fs
Marie si vyrazila do mesta.
      ^
zatimco Ts opet zastavi drive:
Marie si vyrazila do mesta.
       ^

Pohyby mezi radky

Ty nejbeznejsi jiz byly receny - kurzorove klavesy nahoru a dolu a pohyby o celou obrazovku. Poznamenam jen, ze vim se snazi pri posunu na sousedni radek udrzovat kurzor ve stejnem sloupci. Je-li nektery radek kratsi, posune kurzor na jeho posledni znak. Pokud se nasledujici radek opet prodlouzi, vrati se do puvodniho sloupce.

Klavesy + a - vas taktez posunou na nasledujici resp. predchozi radek. Kurzor se vsak premisti na jeho prvni neprazdny znak.

Pro dalkove presuny muzete pouzit prikaz G. Pred nim zadejte cislo a vim vas prenese na radek daneho cisla. Napriklad skok na osmacty radek souboru obstara 18G. Pokud neuvedete cislo, ocitnete se na konci souboru.

Zajimavou moznost ztelesnuje %. Udava pozadovanou pozici v procentech z celkove velikosti souboru (presneji receno z poctu jeho radku). Pokud se tedy chcete presunout na prostredni radek textu, staci zadat 50%.

Logicke poskoky

Vsechny dosavadni pohybove prikazy pracovaly s fyzickymi jednotkami, jako je sloupec, znak, radek ci obrazovka. vim nabizi krome nich i presuny podle logickych kategorii - o slovo, vetu ci odstavec.

Pro posuny o slovo slouzi nasledujici skupina prikazu:

w, W na zacatek nasledujiciho slova
e, E na konec tohoto slova
b, B na nejblizsi predchozi zacatek slova

Rozdil mezi malymi a velkymi pismeny pri jednotlivych pohybech spociva v tom, jak se interpretuje slovo. Pro mala pismena (w, e, b) je za slovo povazovana souvisla posloupnost pismen, cislic a podtrzitek nebo souvisla posloupnost ostatnich neprazdnych znaku. Proto bude retezec "ahoj." povazovan za dve slova - prvni je tvoreno pismeny slova "ahoj", druhe teckou.

Pri pouziti velkeho pismene (W, E, B) je za slovo povazovana posloupnost neprazdnych znaku. V tomto pripade by tedy retezec "ahoj." byl povazovan za jedno slovo, protoze neobsahuje mezeru.

Priklad:
Vyjdeme z teto situace (pozici kurzoru vyznacuje sipka):
Jede vlak, ale nakladni.
      ^
Prikazem w se kurzor presune na carku za slovem "vlak". Naproti tomu W jej posune az na prvni pismeno slova "ale".

Po provedeni 3e se ocitneme na pismeni "e", ukoncujicim "ale". Prvni e totiz postrci kurzor na "k", druhe na konec "slova" tvoreneho carkou a treti na konec "ale".

Naproti tomu 2b z puvodni pozice premisti kurzor na prvni znak vety. 2B ma stejny vyznam.

Jeste zajimavejsi jsou posuny po vetsich celcich. Napriklad ) presune kurzor na zacatek nejblizsi nasledujici vety. Pritom za konec vety je pocitan znak ".", "!" nebo "?" nasledovany mezerou ci koncem radku. Chcete-li se vratit na nejblizsi predchozi zacatek vety, pouzijte (.

Za konec odstavce je povazovan prazdny radek. Prikaz } vas premisti za nejblizsi nasledujici konec odstavce, zatimco { pred nejblizsi predchazejici. Smazat tri odstavce (od aktualni pozice kurzoru smerem dolu) tedy muzete pomoci 3d}.

Posledni ze zakladnich pohybu je velmi cenny pri hledani nesrovnalosti v zavorkovani. Pomoci prikazu % se muzete presunout na odpovidajici parovou konstrukci. Za parove jsou pritom povazovany vsechny tri typy zavorek (...), [...], {...}, komentarove dvojznaky podle konvenci jazyka C /*...*/ a instrukce makroprocesoru #if, #ifdef, #else, #elif a #endif. Pri hledani paroveho prvku se samozrejme berou v uvahu pripadne vnorene konstrukce, takze se najde skutecne ta zavorka (ci jiny prvek), ktera je parova k te pod kurzorem.

Priklad:
Pokud v situaci
(  (  )  (  ()  ()  )  )
         ^
pouzijete %, ocitnete se zde:
(  (  )  (  ()  ()  )  )
                    ^
Kdyz nyni znovu stisknete %, vrati se kurzor na puvodni pozici.
Povsimnete si dvojakosti prikazu %. Pokud mu predchazelo cislo, presune vas na radek, vzdaleny o uvedeny pocet procent od zacatku textu. Jestlize jste pred nim zadne cislo nezadali, preskoci na parovou zavorku. Kdyz v tomto okamziku nestoji na zadne z vyse uvedenych parovych konstrukci, neudela nic.

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