|
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 .
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:
- 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.
- 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.
© 1997, 1998 Pavel Satrapa
|