Hlavní navigace

VIM na plný výkon: úpravy vzhledu

Michal Burda 9. 12. 2003

Další várka tipů pro nastavení vašeho .vimrc souboru. Dnes se podíváme na úpravy vzhledu VIMu a také na volby, které přímo ovlivňují práci s textem.

Nastavení vzhledu

Následující výčet nastavení je šitý na míru grafické verzi VIMu. Jmenované volby ale většinou vyhovují i v negrafickém provedení editoru. Záleží na každém z vás, která nastavení použijete. Pro více informací o jednotlivých volbách doporučuji nahlížet do nápovědy VIMu příkazem :help ‚jméno_volby‘ (včetně apostrofů kolem názvu).

set display=lastline 

Zobrazovat alespoň část řádku místo nehezkých @.

set guioptions=agimrtTb 

Různá nastavení pro grafickou verzi VIMu. Pomocí této volby se ovlivňuje způsob, jakým VIM zachází s vizuálními bloky, určují se pozice scrollbarů, ikony, zobrazování menu, toolbaru atd. (Více viz nápovědu.)

Doby malých rozlišení obrazovek jsou dávno hluboko v nostalgické minulosti, proto si často můžeme dovolit jisté plýtvání prostorem. Ve VIMu například tím, že necháme natrvalo zapnout tzv. statusline (bílý řádek se stavovými informacemi pod obsahem editovaného bufferu) a nastavit ho, aby zobrazoval různé informace o upravovaném souboru:

set laststatus=2
set statusline=%1*%n:%*\ %<%f\ %y%m%2*%r%*%=[%b,0x%B]\ \ %l/%L,%c%V\ \ %P
highlight User1 guibg=white guifg=blue
highlight User2 guibg=white guifg=red 

Volba laststatus=2 znamená, že chceme, aby byl stavový řádek zapnutý vždy (1 = jen když je ve VIMu více „oken“ s buffery, 0 = nikdy). Příkaz set statusline nastavuje vzhled stavového řádku. Zběsilý řetězec v příkazu popisuje následující design řádku: číslo bufferu v barvě User1, název editovaného souboru s relativní cestou následovaný rozpoznaným typem souboru, značka modifikace, značka pro read-only soubory v barvě User2 a zprava zarovnané ASCII kódy znaku pod kurzorem (v desítkovém a šestnáctkovém formátu), číslo řádku lomeno počet všech řádků, číslo sloupce, číslo relativního sloupce, pokud se liší od předchozí hodnoty, a konečně procentuální poloha vůči celému souboru. Dvojice příkazů highlight nastavují barvu User1 na modrou aUser2 na červenou s bílým pozadím. Uvedenou sadou příkazů získáte velice komfortní stavový řádek (viz obrázek).

Ukázka stavového řádku

Pokud nehodláte laststatus nastavovat na hodnotu 2, zapněte si alespoň zobrazování polohy kurzoru při vypnutém stavovém řádku:

set ruler
set rulerformat=%3b\ \ %l,%c%V%=%P 

Tzv. ruler se zobrazuje na posledním řádku VIMu, který je beztak vyhrazen pro příkazy uživatele… Více informací o stavovém řádku i ruleru podá nápověda VIMu (:help ‚statusline‘, :help ‚ruler‘ atd.).

set showmatch 

je výborná pomůcka zejména pro programátory. Při napsání pravé závorky (), ] nebo }) kurzor krátce zabliká na odpovídající levé závorce. Pokud pravé závorce žádná levá neodpovídá, editor pípne.

set showcmd 

říká editoru, aby na posledním řádku vpravo zobrazoval právě psaný příkaz. U složitějších mazacích konstrukcí tak máte možnost sledovat, co jste už namačkali a co ne.

set title
set titlestring=VIM\ -\ %t 

touto dvojicí určujeme, jak má vypadat titulek okna VIMu. V našem případě to je řetězec „VIM“, pomlčka a název souboru.

set mousemodel=popup 

pravé tlačítko myši má v grafické verzi VIMu otevírat vyskakovací menu.

set scrolloff=5 

Minimální počet řádků obrazovky, které mají být vidět před a za kurzorem. Získáte tak lepší přehled o místě v textu, na kterém se právě nacházíte. Pokud se vám zdá 5 moc, přijatelné minimum je nejspíš 3.

Podobnou volbou, ale pro horizontální scrollování je:

set sidescroll=5 

Parametry editace

Konečně se dostáváme k tomu, k čemu je VIM určen: k editování textů. Výrazné ulehčení zejména programátorům nabízí VIMem podporovaný mechanismus automatického odsazování. Základními volbami pro tuto pomůcku je následující trojice konfiguračních příkazů.

set autoindent 

Při vytvoření nového řádku se automaticky použije odsazení z předchozího řádku. (Tj. automaticky se na začátek nového řádku vloží tolik mezer, kolik jich je na začátku minulého řádku.)

set smartindent 

Zavede se navíc „trochu chytřejší odsazování“ – např. VIM automaticky zvětší odsazení po řádku končícím „{“ nebo upraví odsazení po napsání „}“ na začátku nového řádku.

set expandtab 

V insert módu použije po stisku tabulátoru patřičný počet mezer místo vložení znaku pro tabulátor. Mezery se místo tabulátoru vkládají také při automatickém odsazování a odsazování pomocí příkazů < a >. Zdá se mi přirozenější pro odsazování používat mezery než tabulátory, protože pak máte jistotu, že váš kód bude vypadat všude stejně. Pokud chcete do souboru přece jenom vložit znak tabulátoru (např. při editování souboru Makefile, kde je nezbytným), můžete použít CTRL-V a Tab.

set backspace=indent,eol,start 

Nastavení chování kláves Backspace, Delete a jim podobným, že mají umět mazat vše: odsazení autoindentem, konce řádků (spojování řádků dohromady), i přes místo, kde začalo vkládání.

let mapleader = ","
let maplocalleader = "," 

Nastavení globálního a lokálního předřaďovače. Předřaďovače se používají pro různá mapování zejména v insert módu. Já je mám nastaveny stejně, aby se nepletly.

set nojoinspaces 

VIM umí automaticky vkládat dvě mezery po „.“, „?“ a „!“ při příkazu spojení řádků (J). Jelikož je tato úprava v našich zeměpisných šířkách nezvyklá, tímto nastavením ji deaktivujeme.

set shiftwidth=2 

Počet mezer vkládaných při (automatickém) odsazování.

set shiftround 

Zaokrouhluj počet mezer při odsazování na násobek shiftwidth. (Týká se odsazování pomocí příkazů < a >.)

set nowrap 

Rozčiluje-li vás, že VIM fyzicky dlouhý řádek zobrazí do několika logických řádků na obrazovce, použijte tuto volbu. Po její aplikaci budou dlouhé řádky jednoduše „mizet“ za pravým okrajem okna, jak jsme zvyklí z jiných editorů.

set textwidth=78 

Nastavení šířky textu. Pokud při psaní dosáhnete nastavené vzdálenosti od levého okraje, řádek se automaticky zlomí na nový. Chcete-li naopak tuto možnost deaktivovat, nastavte textwidth na 0.

vnoremap p <Esc>:let
current_reg = @"<CR>gvdi<C-R>=current_reg<CR><Esc> 

Tenhle příkaz jsem si „vypůjčil“ z ukázkového .vimrc souboru Brama Moolenaara, hlavního tvůrce editoru VIM. Měl by zapříčinit přirozenější chování klávesy p (paste). V módu vizuálních bloků se stiskem p nahradí označený text textem v registru (schránce).

Poslední volbou dnešního dne, kterou jsem shledal zajímavou, je:

set clipboard=unnamed 

Vše, co se ukládá do „unnamed“ registru, se bude ukládat zároveň i do clipboardu. To znamená, že cokoliv uložíte pomocí y (yank) apod., se dává i do clipboardu, takže uchovaný text lze přímo vlepit do jiné aplikace. Podobně se chová i p (paste).

Na závěr by se slušelo poznamenat, že výčet konfiguračních voleb prezentovaných v tomto a minulém dílu není v žádném případě kompletní. VIM podporuje desítky různých nastavení. V textu jsem se snažil vybrat jen ty, o kterých si myslím, že jsou nejzajímavější a nejužitečnější. Výčet všech možných voleb najdete v nápovědě VIMu (:help option-summary).

Tímto malý výčet základních nastavení VIMu končí, avšak seriál o ladění výkonu VIMu nikoliv. Příští týden jedeme dál – podíváme se na pokročilejší možnosti konfigurace.

Našli jste v článku chybu?

21. 6. 2005 2:44

uživatel si přál zůstat v anonymitě
Protože LISP? :-D

1. 2. 2004 12:20

Jakub Vysoky (neregistrovaný)

zdravim root a diky za clanek.

stejne tak diky pavlu tisnovskemu za mini navod, jak predelavat taby na mezery, coz je skutecne dobra vec, kdyz sdilite s nekym zdrojaky a chcete v nich mit trochu poradek.

jenom zasilam malou opravu. kombinace
:set noexpandtab
:retab
totiz tak uplne nefunguje (gVim 6.2)

pro kompletni prevedeni mezer ve zdrojaku na tabulatory je potreba udelat nasleduji.
:set expandtab
:set ts=CISLO
# CISLO znaci pocet mezerniku na odsazeni jednoho
# bloku pouzitych…












Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube