Okna
Okna jsou jednou z velmi příjemných vymožeností vim. Umožňují vám vidět zároveň několik souborů (nebo třeba několik pohledů do jednoho a toho samého souboru), libovolně je střídat a přenášet části textu z jednoho do druhého. Na obrázku vidíte vim se dvěma otevřenými okny.
Otevírání a zavírání oken
Nejzákladnějším způsobem, jak spustit vim s několika okny, je zadat mu
na příkazovém řádku volbu -o
. V takovém případě otevře okno
pro každý soubor, který má editovat.
Příklad:
Příkazem
vim -o histor.html okna.html
jsem spustil vim, jehož obrazovka bude rozdělena na dvě okna. Jedno bude obsahovat soubor
histor.html
a druhéokna.html
. Výsledek vidíte výše.
Často si však až během editace vzpomenete, že byste rádi na chvíli nahlédli
i do jiného souboru a třeba z něj kousek převzali do toho aktuálního. V takovém
případě poslouží příkaz :split soubor
, kde soubor je jméno
souboru, který se má v okně objevit. Samozřejmě je nemusíte
zadávat – pak se objeví prázdné okno.
Zavírání okna se nijak neliší od uzavření souboru – použijte
prostě :q
(případně :q!
, :wq
či ZZ
– podle toho, zda jste obsah okna změnili
a zda jej chcete uložit).
Při práci s okny se příkaz :q
chová poněkud
odlišně, než bez nich. Jestliže totiž máte otevřeno další okno se stejným
souborem, nezavírá se soubor, ale jen okno. Proto se editor nestará o případné
neuložené změny. Teprve při zavírání posledního okna do souboru použije
klasické chování.
Jestliže se zároveň jedná o poslední okno editoru, bude současně s oknem ukončen i vim. Běžný „neokenní“ režim práce je vlastně režim „okenní“ s jediným otevřeným oknem.
Používání
Každé okno jest chápati jako okénko, kterým nahlížíte do obsahu souboru. Můžete si jich otevřít mnoho, ale v praxi nejčastěji pracujete se dvěma okny – v jenom je „hlavní“ editovaý soubor a ve druhém soubor, do kterého momentálně chcete nahlédnout či z něj něco zkopírovat.
Všechny okenní operace se vyvolávají dvojicí znaků, z nichž první je Ctrl-W
(W jako window). Základem použití oken je
pochopitelně poskakování z jednoho do druhého. Asi nejčastěji používaný je
příkaz Ctrl-W Ctrl-W
. Přesune kurzor do okna
pod aktuálním. Jste-li v nejnižším okně obrazovky, přetočí se zpět nahoru.
vim si pamatuje pozici, ze které jste dotyčné okno opustili a při
návratu vás posadí přímo na ni.
Pozor! Příkazy pro práci s okny je třeba provádět v normálním
režimu. Ve vkládacím totiž Ctrl-W
vymaže slovo
před kurzorem.
Poměrně intuitivní je i další způsob přepínání oken: po Ctrl-W
stiskněte některý z příkazů pro pohyb nahoru či
dolů a kurzor přejde do sousedního okna v uvedeném směru. Takže Ctrl-W [šipka nahoru]
nebo Ctrl-W k
posouvají kurzor do vyššího okna, zatímco při
Ctrl-W [šipka dolů]
či Ctrl-W j
naopak klesáte.
Pokud vaše verze vim podporuje myš, můžete střídat okna prostým klepnutím myši. Kurzor se totiž přesune na pozici klepnutí, ať je kdekoli. Takže případně změní aktuální okno. Klepnete-li na stavový řádek okna, přestěhuje se kurzor do něj na pozici, ze které jste je naposledy opustili.
Změny uspořádání
Člověku je většinou jedno, v jakém pořadí se okna na obrazovce vyskytují. Pokud
by to náhodou nebyla pravda, příkaz Ctrl-W r
rotuje okna směrem dolů, Ctrl-W R
rotuje okna
nahoru a Ctrl-W x
vymění aktuální okno s oknem pod
ním.
Naopak poměrně častou potřebou je změna velikosti oken. Implicitně je
vim nastaven tak, že při vytvoření nového okna změní velikosti všech
stávajících tak, aby všechna okna byla stejně vysoká. Toto chování řídí volba
equalalways
. Pokud ji vypnete (:set noequalalways
), rozdělí se při vytváření nového
okna to stávající na dvě poloviny a výšky ostatních oken zůstanou
zachovány.
Když vám stávající velikost okna nevyhovuje, můžete ji upravit: příkaz Ctrl-W +
ji zvětšuje a Ctrl-W -
zmenšuje. Uvedete-li před nimi číslo,
zvětší/zmenší se o daný počet řádků. Implicitní hodnotou je 1. Pomocí
Ctrl-W _
nastavíte výšku okna přesně na
číslo, které jste uvedli před příkazem. Implicitně použije maximální výšku okna
(všem ostatním ponechá jediný řádek). V grafické verzi se velikost oken
nejsnadněji mění popotažením lišty mezi nimi pomocí myši.
Změnu velikosti lze zajistit i automaticky. Volba winheight
totiž udává minimální požadovanou výšku
aktuálního okna. Nastavíte-li třeba :set winheight=10
a přejdete s kurzorem do malinkého
okénka, roztáhne se na výšku deseti řádků. Když do winheight
uložíte velkou hodnotu (třeba 100), bude
aktuální okno vždy roztaženo na maximální plochu a všechna ostatní degradována
na jediný řádek. Někomu takové chování vyhovuje, někdo dává přednost stabilnímu
uspořádání oken. Volba je na vás.
Vertikální okna
S verzí 6 se objevila možnost rozdělovat obrazovku také svisle. Slouží k
tomu příkaz :vsplit
, který se chová podobně jako
výše zmiňovaný :split
. Jediný rozdíl je v tom, že
obrazovku rozdělí svisle.
Několikerým použitím :split
a :vsplit
můžete na obrazovce vytvořit celkem divoký
propletenec svislých a vodorovných oken.
Také ostatní příkazy pro práci s okny zůstávají analogické. Mezi svislými okny
se přechází sekvencí Ctrl-W
a pohybu do strany
(h
, l
nebo kurzor
doleva či doprava). Šířka okna se mění pomocí Ctrl-W <
a Ctrl-W >
. Expanzi na co největší šířku zajistí
Ctrl-W |
. Analogií volby winheight
je zde winwidth
.
Upřímně řečeno svislá okna zrovna nemiluji. Znamenají krátké řádky a s krátkými řádky je vždycky potíž. Nicméně občas se svislé okno docela hodí – například při porovnávání souborů.
Panely čili taby
Používání panelů – překrývajících se oken na jedné ploše, která přepínáte pomocí štítků nad nimi – je poslední dobou velmi populární. Vim je podporuje od verze 7.
Otevřít je lze hned při startu, když na příkazovém řádku použijete volbu
-p
(mnemotechnika: panely). Každý otevřený soubor pak bude mít
svůj vlastní panel. Kdykoli později můžete přidat další panel příkazem
:tabnew
nebo :tabedit
.
Když mu jako parametr zadáte jméno souboru, naplní jím nový panel.
V rámci panelů lze výše popsaným způsobem zakládat okna. Každý panel se vůči oknům chová jako samostatně bežící vim.
Mezi panely se můžete přesouvat několika způsoby. Standardní cestou jsou
klásové kombinace gt
(další panel) a gT
(předchozí panel). Stejný význam mají i Ctrl-PgDown
a Ctrl-PgUp
.
Kromě toho lze samozřejmě myší klepnout na štítek příslušného panelu. A když už
jsme u myšli – klepnutím pravým tlačítkem kdekoli v liště se štítky
panelů vyvoláte kontextové menu, jež vám je umožní otevírat a zavírat.
Pokud vám nevyhovuje pořadí panelů, sáhněte po příkazu :tabmove N
, který přesune aktuální panel za
panel číslo N. Čísluje se od jedničky, číslem nula přesunete aktuální
panel na první místo. Bez čísla jej naopak posunete až na konec.
Panel se zavře, když zavřete soubor v něm otevřený (resp. všechna jeho
okna). Kromě toho můžete použít i příkaz :tabclose
.
Příkaz :tabonly
naopak pozavírá všechny panely
kromě toho, v němž se právě nacházíte.
© 2016 Pavel Satrapa