Hlavní navigace

Jak si přizpůsobit Vim (1)

1. 6. 2001
Doba čtení: 6 minut

Sdílet

Vim je velmi vylepšená verze klasického unixového editoru vi. Je hojně používaný a oblíbený, o čemž svědčí přední místa, která notoricky zaujímá v průzkumech uživatelské popularity. V dnešním článku (a jeho několika pokračováních) se podíváme, jak jej naučit co nejlépe sloužit páníčkovi či paničce.

Pokud snad jste editorem Vim dosud nedotčeni nebo se v něm teprve osmělujete, dovolil bych si vám doporučit základní uživatelskou příručku, kterou jsem před časem sepsal a vyvěsil na svých stránkách. Zde se pokusím doporučit vám některá nastavení a konfigurační úpravy, které se mi v praxi osvědčily a mohly by být k užitku i vám.

Jak konfigurovat

Příkazy, kterými přizpůsobujete chování editoru, lze testovat živě přímo během editace. Prostě v příkazovém režimu napíšete :set  cosi a stisknete <Enter>. Chování programu se změní a vy si můžete vyzkoušet, zda vám vyhovuje. Účinek nastavení pochopitelně zmizí s ukončením programu.

Má-li být změna trvalá, je třeba ji zapsat do konfiguračního souboru. Připadají v úvahu tři: globální, osobní a lokální. Když Vim startuje, nejprve provede globální konfiguraci, která je společná pro všechny uživatele. Poté provádí váš soukromý konfigurační soubor, kterým lze pozměnit globální nastavení.

Kde je hledat? Vim vám napoví. Spusťte si jej a zadejte příkaz :version. V jeho výstupu najdete zhruba následující informace:

system vimrc file: "$VIM/vimrc"
   user vimrc file: "$HOME/.vimrc"
                ...
fall-back for $VIM: "/usr/share/vim"

Říkají, že pokud nemáte definovánu proměnnou prostředí $VIM, je globální konfigurace uložena v /usr/share/vim/vim­rc (častá je též /usr/local/sha­re/vim/vimrc). Vaše soukromá pak sídlí ve .vimrc v domácím adresáři - kde také jinde. Všimněte si, že jméno globálního souboru nezačíná tečkou.

Další úpravu konfigurace může způsobit soubor .vimrc v aktuálním adresáři. Načítá se až po výše uvedených souborech, a to pouze v případě, že je zapnuta volba exrc. Tento krok totiž představuje jisté bezpečnostní riziko. .vimrc v cizím adresáři mohl někdo připravit se zlým úmyslem vám uškodit a jeho provedení může být destruktivní (Vim samozřejmě umí spouštět externí programy). Implicitně je proto vypnuto. Má-li Vim načítat .vimrc z aktuálního adresáře, musí buď globální (to bych raději nedoporučoval), nebo vaše osobní konfigurace obsahovat příkaz  set exrc.

Výhoda lokálního .vimrc je jasná: může nastavit věci specifické pro určitý projekt. Například v adresáři, kde píši texty pro roota, mám vytvořen lokální .vimrc soubor, který mi definuje pro klávesu <F5> makro vytvářející modré neproporcionální písmo pro názvy příkazů. Soubor navazuje na definice provedené již dříve, takže jeho obsahem je jediný řádek:

imap <F5> <FONT COLOR="#3090DD"><CODE></CODE></FONT><Esc>2F<i

Pokud Vim startuje v grafickém režimu, následuje poté ještě provedení globální konfigurace ze souboru gvim a soukromé z .gvimrc. Jejich umístění odpovídá „negrafickým“. Jelikož standardní konfigurace již byla provedena, pište do těchto souborů jen příkazy související s grafickým režimem (např. nastavení barev či písma).

Pokud některý ze zmiňovaných souborů neexistuje, vůbec nic se neděje. Neexistuje-li žádný z nich, Vim prostě naběhne v implicitní konfiguraci.

A důležité upozornění na závěr: Do konfiguračních souborů se příkazy zapisují bez úvodní dvojtečky. Ta se používá jen při interaktivní práci (nařizuje editoru přechod na příkazový řádek).

Vytvoření konfiguračního souboru může být zcela bezbolestné. Stačí si interaktivně nastavit Vim tak, jak vám vyhovuje, a použít příkaz

:mkvimrc soubor

Vim uloží do zadaného souboru příkazy, které nakonfigurují program do jeho momentálního stavu. Vynecháte-li jméno, použije jako implicitní .vimrc v aktuálním adresáři. Snaží se šetřit, takže do souboru zapisuje jen ta nastavení, která se liší od implicitních hodnot.

Pevný bod, který pohne zeměkoulí

Počínaje tuším pátou verzí programu se Bram Moolenaar, autor Vim, rozhodl podporovat maximální kompatibilitu s vi. Nenakonfigurovaný Vim tudíž nabíhá v tzv. kompatibilním režimu, kdy je jeho chování až na nepatrné detaily totožné s vi. Běžný uživatel vnímá kompatibilní režim tak, že nic nefunguje. Vymaníte se z něj příkazem

:set nocompatible

Musíte to napsat pěkně celé - nefunguje doplňování. Pokud existuje některý z výše zmiňovaných konfiguračních souborů *vimrc, Vim ví, že se má chovat jako Vim a pracuje v nekompatibilním režimu. Přesto je dobrým zvykem zahajovat globální konfigurační soubor příkazem  set nocompatible.

Začněme vzhledem

Základem úspěšné práce je informovanost. Vědět, co se děje a v jaké situaci se člověk nachází, je životně důležité. Za absolutní nutnost proto považuji následující čtveřici:

Tabulka č. 121
:set ruler vpravo dole zobrazuje pozici kurzoru
:set showmode vlevo dole zobrazuje aktuální režim
:set showcmd zobrazuje doposud zadanou část příkazu (přínosné u víceznakových příkazů, jako je třeba qf})
:syntax on barevně zvýrazňuje syntaxi v editovaném textu, podrobnosti se dočtete zanedlouho

První tři vkládají užitečné informace do stavového řádku, kterým je poslední řádek obrazovky či okna.

V grafickém režimu hraje velmi významnou úlohu písmo, které Vim používá. Jsem možná divný, ale to implicitní mi připadá příliš drobné a pro pohodlnou práci potřebuji větší. Takže v mém gvimrc byste našli příkaz

set guifont=-misc-fixed-medium-r-normal--15-*-iso8859-2

Na řadě monitorů používám ještě větší (20 bodů). Velmi pěkným nástrojem pro výběr vhodného písma je program gfontsel - vyberte si to pravé a pomocí cut&paste si jeho příšerný identifikátor přeneste do konfiguračního souboru. Používejte pouze neproporcionální písma! Např. v gfontsel zadejte jako filtr „pevný blok“ a vyberte si z písem, která zbyla.

V grafickém režimu si můžete předepsat také velikost okna, které Vim vytvoří. Zadává se jako počet zobrazených řádků a sloupců příkazy

:set lines= řádky
:set columns= sloupce

Zobrazení textu

Podívejme se teď na způsob, kterým editor zobrazuje editovaný text. Základní problém zde tvoří dlouhé řádky, které mají více znaků, než je kapacita obrazovky či okna. Vim je buď rozdělí do několika po sobě jdoucích, nebo je ponechá na jednom řádku a zobrazí jen část z nich. Nevím, co z toho je větší zlo.

Implicitně Vim rozděluje řádek (toto chování lze zapnout příkazem :set wrap). Zbytek přesahující přes pravý okraj umístí na následující obrazovkový řádek (či několik řádků, pokud je textový řádek velmi dlouhý). Přidáte-li příkaz :set showbreak=+, vloží se na začátek každého pokračovacího řádku barevně odlišený znak „+“ (můžete samozřejmě nastavit libovolný řetězec). Snadno tak poznáte, kde jsou skutečné začátky řádků. Pokud totiž zapnete :set linebreak, nerozděluje Vim řádek striktně na pravém okraji, ale hledá směrem doleva mezeru a řádek rozdělí v jejím místě. Bez showbreak pak nepoznáte, kde jsou skutečné hranice řádků (to se někdy může hodit).

Jeden rozdíl tu však přece jenom je - chování kurzorových kláves. Klasické pohyby nahoru a dolů totiž přesouvají kurzor mezi skutečnými (čili textovými) řádky. Stává se pak, že jedno stisknutí šipky dolů posune váš kurzor o několik obrazovkových řádků. Vim proto nabízí alternativní pohybové příkazy: pokud nejprve stisknete klávesu g a po ní šipku nahoru či dolů, posune se kurzor o jeden obrazovkový řádek. Pokud vám právě toto chování vyhovuje, stačí si namapovat:

:noremap <Up> g<Up>
:noremap <Down> g<Down>

Tyto pohyby platí v příkazovém režimu. Bohužel mi není známo, že by existovaly obdobné příkazy pro režim vkládací. Chcete-li, aby byl vkládací režim konzistentní s příkazovým (což je velmi žádoucí), nenapadá mne nic chytřejšího, než následující berlička:

:inoremap <Up> <Esc>g<Up>a
:inoremap <Down> <Esc>g<Down>a

Tedy odskok do příkazového, posun a návrat zpět do vkládacího.

CS24 tip temata

Jestliže si nepřejete rozdělování řádků, je pro vás určeno :set nowrap. K nezobrazené části řádků se pak dostanete jednoduše - prostě pojedete kurzorem odpovídajícím směrem a když byste měli vyjet z obrazovky, posune se místo kurzoru text pod ním. Volbou sidescroll pak určujete, o kolik znaků - např. :set sidescroll=10. Implicitní hodnotou je 0, což znamená posun o polovinu obrazovky/okna.

Tak, to by pro začátek stačilo. V příští části se podíváme na slíbené barevné zvýrazňování syntaxe, povíme si něco málo o možnostech vylepšení funkce hledání a nakonec se podíváme na některé konfigurační volby ovlivňující chování editoru přímo při editaci textu.

Autor článku

Pavel Satrapa působí na Ústavu nových technologií a aplikované informatiky na Technické univerzitě v Liberci, píše knihy a motá se kolem tuzemské akademické sítě CESNET.