☰ menu
Pavel Satrapa

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.

dva dokumenty v oknech

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.

ukázka editoru s panely

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.