☰ menu
Pavel Satrapa

Formátování textu

Abych předešel případnému nedorozumění, předem vyjasním pozice. vim je ASCII editor, nikoli typografický nástroj. V této části budu proto mluvit o formátování textu, tedy uspořádání jednotlivých znaků do řádků a sloupců. Nebudu se zabývat sazbou, čili estetickou úpravou textu, která vyžaduje práci s proporcionálním písmem, jeho různými druhy a velikostmi. V oblasti sazby nemá vim co nabídnout. Může posloužit pouze jako nástroj k editaci zdrojových textů pro specializované typografické programy, jako je třeba TeX. Sám ho používám právě tímto způsobem.

Pravý okraj a jeho dodržování

Původní vi byl navržen především k vytváření zdrojových textů programů. V nich bývají řádky krátké a proto problém hlídání pravého okraje nebyl nijak zvlášť palčivý. Pro editaci běžných textů je však tato vlastnost nezbytná.

Ve vim lze nastavit šířku řádku (čili polohu pravého okraje) pomocí

:set textwidth=šířka

kde šířka udává počet znaků na řádku. Implicitní hodnotou je nula, při níž vim pravý okraj nehlídá a řádky mohou být široké, co hrdlo ráčí. Jakmile do textwidth uložíte nenulovou hodnotu, začne se editor starat o pravý okraj. Dělá to obvyklým způsobem. Jakmile jej při psaní překročíte, vyhledá poslední mezeru od konce řádku, v jejím místě řádek ukončí a slovo, které právě píšete, přesune na začátek dalšího.

Při zápisu se může uplanit též automatické odsazování. Zapnete je pomocí :set autoindent. Jakmile řádek zahájíte mezerou či několika mezerami, vim automaticky bude přidávat stejný počet mezer na začátek každého řádku pod ním. Existují ještě dva další režimy odsazování (:set smartindent a :set cindent), které vycházejí vstříc formátování zdrojových textů v jazyce C. Při psaní běžných textů občas působí problémy, nicméně :set smartindent představuje celkem schůdnou univerzální volbu pro všechny případy.

Změna formátování

Při úpravách textu snadno docílíte toho, že řádek překročí pravý okraj nebo se naopak neúměrně zkrátí. V takových případech přichází ke slovu přeformátování, které text znovu uspořádá v rámci současných okrajů.

Základním příkazem pro přeformátování části textu je gq. Za ním uveďte pohybový příkaz, který určí část textu, jíž se formátování dotkne. Velmi často jsou používány kombinace gqj (formátuje tento a následující řádek) a gq} (formátuje od pozice kurzoru až do konce odstavce). Kurzor je po provedení formátovacího příkazu přemístěn na místo, kam by jej přesunul dotyčný pohybový příkaz. Díky tomu lze snadno pokračovat ve formátování dalších prvků textu prostým opakováním (příkaz .).

Speciálním případem je kombinace gqap (mnemotechnika: „ap“ je z anglického „a paragraph“). Ta zajistí formátování celého odstavce, v němž se momentálně nachází kurzor. Je přibližně ekvivalentem kombinace {gq} (návrat na začátek odstavce a formátování textu až po jeho konce). Tato operace je velmi praktická, protože často provedete zásah kdesi v odstavci a následně jej chcete celý přerovnat.

Zarovnání textu

Kromě nejběžnějšího formátování, dodržujícího předepsaný pravý okraj, můžete použít ještě několik méně obvyklých způsobů. Všechny se vyvolávají v podobě ex-příkazů a týkají se proto vždy skupiny řádků:

příkaz význam
:ce nebo :center na středovou osu
:ri nebo :right k pravému okraji
:le nebo :left k levému okraji

Rozsah řádků, kterých se má tato změna dotknout, je nejvýhodnější určit ve vizuálním režimu. V případě :right a :center můžete jako parametr stanovit šířku řádku, která se má při formátování použít. Například centrování pro řádek o šířce 50 znaků zajistí příkaz

:ce 50

Pokud údaj chybí, použije se aktuální hodnota textwidth a jestliže je nulová, použije vim šířku obrazovky či okna. Zadáte-li číselný parametr příkazu :left, bude pochopen jako počet mezer, které má vložit před každý přeformátovaný řádek. Implicitní hodnotou je nula.