Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

VIM na plný výkon: .vimrc

O editoru VIM a různých tipech a tricích pro něj už byly napsány i tady na Root.cz stohy článků. Doufám, že mi přesto nebudete mít za zlé, když i já přispěji svou kapkou informací pro všeobecné VIMařské blaho. Začneme prohlídkou základních nastavení, aneb co všechno si vepsat do svého .vimrc souboru, abychom přizpůsobili chování editoru svým potřebám.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Vítám vás u nového seriálu věnovaného báječnému editoru VIM. Jsem dlouholetým spokojeným uživatelem tohoto pořizovače textů, a jak léta plynou, můj .vimrc soubor a .vim adresář se utěšeně zvětšuje. Se slzou v oku vzpomněl jsem si jednoho dne na ty chvíle, kdy obojí bylo prázdné a já se poprvé pustil do boje s konfigurací VIMu. Nostalgické vzpomínky rozjitřily mé tuhé nitro a já si usmyslel, že se podělím se svými skromnými zkušenostmi s čtenáři Roota. Třeba zrovna teď jsou mezi nimi nováčci, kteří podobně jako já před léty začínají bojovat s tímto panem Editorem a kterým snad mé informace pomohou.

Než se pustíme do popisu rozličných novot a zdokonalení, vzpomenu ještě své další dílko, které vyšlo rovněž na stránkách tohoto listu. Pojednává o kostrách neboli skeletonech nových dokumentů. Zdrojový kód ve výše uvedeném článku však obsahuje drobnou chybičku zapříčiňující ošklivou chybovou hlášku při pokusu editovat „nekostrovaný“ dokument, kterou jsem nedávno (doufám) náležitě opravil.

Chování editoru

Začneme nastaveními, která ovlivňují chování editoru jako takového. Všechny volby (nejenom z tohoto odstavce) se zapisují do .vimrc souboru ve vašem domovském adresáři.

set nocompatible 

Zapnutí režimu nekompatibilního s tradičním VI. VI povoluje jen omezené možnosti, režim nocompatible je daleko lepší. Protože se jedná o volbu, která nastavuje jako vedlejší efekt další parametry, měla by být provedena co nejdříve (nejlépe úplně na začátku .vimrc souboru).

filetype plugin indent on 

Nastavení rozpoznávání typu editovaného souboru, filetype pluginů a odsazování podle typu souboru. VIM umí rozpoznávat, jakého typu je editovaný soubor. Rozezná, jestli se např. jedná o zdrojový kód programu v C, Javě, PHP nebo třeba o HTML stránku (typů rozlišovaných souborů jsou desítky). Podle rozpoznaného typu souboru můžete VIM rozdílně konfigurovat. Dělá se to pomocí tzv. filetype pluginů. Co jsou zač a jak se s nimi pracuje, budeme rozebírat někdy příště.

V grafickém režimu nebo na „schopných“ terminálech by se jistě slušelo zapnout zvýrazňování syntaxe a nalezeného řetězce:

if &t_Co > 2 || has("gui_running")
  syntax on
  set hlsearch
endif 

Další užitečnou volbou je bezesporu:

set autowrite 

Modifikované soubory se budou automaticky ukládat při přechodu do jiného bufferu, spuštění externího příkazu, při volání :make apod. Ukládat se automaticky nebudou při ukončení editoru či odstraňování bufferu (místo toho VIM zahlásí chybu nebo se zeptá, co má dělat). Chcete-li soubor automaticky ukládat vždy (nedoporučuji), použijte místo toho nastavení set autowriteall.

set backup
set backupdir=~/.vim/backup,.,~/ 

Těmito volbami říkáme, že chceme, aby VIM vytvářel zálohy souborů a aby tyto zálohy ukládal do ~/.vim/backup (adresář je třeba vytvořit), a pokud to nepůjde, tak do aktuálního adresáře nebo domovského adresáře. Záložní soubor se pozná podle znaku tildy (~) na konci svého názvu. Tj. např. pokus.txt bude mít záložní souborpokus.txt~ at­d.

set directory=~/tmp,.,/tmp 

Čárkami oddělený seznam adresářů, kam se mají ukládat dočasné soubory. Pokud nelze dočasný soubor uložit do prvního adresáře v seznamu, použije se druhý v pořadí atd. Osobně mě rozčiluje, když se dočasné soubory ukládají do adresáře, ve kterém pracuji. Pomocí této volby jsem si je tedy přesměroval do soukromého tmp adresáře.

set confirm 

Místo, aby různé operace (:q, :e) selhaly, protože není uložen aktuální buffer, VIM se uživatele zeptá, jestli chce soubor uložit.

Když po své práci opouštíte editor VIM, ztrácí se tím mnoho informací. Přicházíte o obsahy registrů (schránek), historii příkazů a vyhledávacích řetězců, globální proměnné a značky. Základním nástrojem VIMu určeným k tomu, abychom o tyto údaje nepřicházeli, je použití .viminfosouboru. Když je VIM vhodně nakonfigurován, ukládá automaticky při každém ukončení různé stavové informace do .viminfo souboru ve vašem domovském adresáři, ze kterých při příštím spuštění čerpá. Vhodnou volbou je například toto:

set viminfo='50,\"500 set history=50

které zajistí, že se budou ukládat informace o posledních padesáti souborech, obsahy registrů se budou uchovávat do velikosti 500 řádků a historie příkazů a vyhledávacích výrazů bude omezena rovněž na 50. VIM by měl také umět automaticky skočit s kurzorem na místo, kde jsme minule skončili. (Více viz :help viminfo a :help ‚viminfo‘.)

set incsearch 

VIM bude už v průběhu psaní vyhledávacího výrazu zobrazovat první odpovídající řetězec v textu. Jinými slovy, použijete-li příkaz /pro přechod do režimu vyhledávání regulárního výrazu v textu a začnete psát písmena ah ve snaze najít řetězec ahoj, VIM po stisku a okamžitě skočí na následující a v textu, po stisku h vyhledá místo s řetězcem ah a tak dále. Zrušíte-li vyhledávání stiskem Esc, vrátíte se zpět na původní pozici.

VIM umí podobně jako různé shelly automaticky doplňovat názvy příkazů nebo souborů. Obvykle stačí napsat jen začátek příkazu, stisknout smluvenou klávesu (v shellech obvykle Tab) a celé jméno příkazu se automaticky doplní. Zkuste do svého .vimrc přidat třeba následující trojici příkazů:

set wildchar=<Tab>
set wildmenu
set wildmode=longest:full,full 

První volba nastavuje jako klávesu pro automatické doplňování tabulátor, druhá volba říká, že pokud je možných doplnění více, má vyskočit jednoduché menu se všemi možnostmi. Třetí příkaz pak určuje, jakým způsobem se má doplňování provádět, pokud je možností doplnění více: první stisk tabulátoru doplní co největší část a zapříčiní zobrazení zmiňovaného menu, ze kterého lze správné doplnění vybírat dalšími stisky klávesy Tab.

Pokud v normálním režimu stisknete třeba š, znamená to v drtivé většině, že jste chtěli vlastně napsat 3 (třeba v příkazu 3dd – výmaz tří řádků), jen jste si zapomněli přepnout klávesnici z české na anglickou. Podobně (a to mi pilo dlouho krev) se často omylem napíše " místo : pro vstup do příkazového módu či – místo / pro vyhledávání apod. Za všechno může zmiňovaná česká klávesnice. Obvykle pak musíte napsaný příkaz zrušit pomocí Esc, stisknout dva shifty pro přepnutí klávesnice a teprve pak napsat to, co jste vlastně chtěli. Šílené zdržení! Ve VIM naštěstí existuje volba, která na toto pamatuje:

set langmap=ě2,š3,č4,ř5,ž6,ý7,á8,í9,é0,\":,-/,_? 

Pomocí ní specifikujete, co ve skutečnosti v normálním režimu znamená který znak. Tak např. ě znamená, že popravdě chceme napsat dvojku, é nulu, pomlčka lomítko, uvozovky dvojtečku atd.

Podobného ražení je i můj následující tip. Při programování velmi často kompilujete a z VIMu se to dělá třeba voláním :make. Mým velmi častým překlepem je, že místo make napíšu mkae nebo maek. Takové příkazy ve VIM (naštěstí) neexistují, ale i tak to představuje obrovské zdržení, protože se příkaz musí po předchozím neúspěchu ťukat znovu. Zadáte-li ovšem do .vimrc následující příkazy:

cabbrev mkae make
cabbrev maek make 

vytvoří se pro příkaz :make „zkratky“ :mkae a:maek a máte po starostech. (Uvedený postup lze pochopitelně aplikovat na libovolné příkazy – fantazii se meze nekladou.)

Ještě větší efektivity práce dosáhnete patřičným namapováním nějaké funkční klávesy (nevýhodou je, že si musíte pamatovat další zkratku navíc :-):

map <F5> :make<CR>
imap <F5> <Esc>:make<CR> 

V normálním i insert módu bude nyní klávesa F5 znamenat spuštění příkazu :make. (Se zapnutou volbou set autowrite pochopitelně také předchozí uložení souboru.)

Jestli jste si podobně jako já zvykli na VIMovské kurzorové klávesy h, j, k, l, že bez nich nemůžete být ani v insert módu, může vám přijít k duhu jejich mapování s podrženou klávesou Ctrl:

imap <C-h> <Left>
imap <C-j> <Down>
imap <C-k> <Up>
imap <C-l> <Right> 

Zdá se mi stále rychlejší stisknout Ctrl a h než opouštět základní položení rukou jen kvůli sáhnutí na kurzorové klávesy. :-)

Mým posledním tipem, který se hodí používat zejména ve spojitosti s Mini Buffer Explorerem (psalo se o něm v jednom z článků o pluginech VIMu), je rychlé přecházení mezi buffery:

davame_internetu_obsah
       
map <A-1> :b1<CR>
map <A-2> :b2<CR>
map <A-3> :b3<CR>
map <A-4> :b4<CR>
map <A-5> :b5<CR>
map <A-6> :b6<CR>
map <A-7> :b7<CR>
map <A-8> :b8<CR>
map <A-9> :b9<CR>
map <A-0> :b10<CR>
map <C-Tab> :bn<CR>
map <S-C-Tab> :bp<CR>

imap <A-1> <Esc>:b1<CR>
imap <A-2> <Esc>:b2<CR>
imap <A-3> <Esc>:b3<CR>
imap <A-4> <Esc>:b4<CR>
imap <A-5> <Esc>:b5<CR>
imap <A-6> <Esc>:b6<CR>
imap <A-7> <Esc>:b7<CR>
imap <A-8> <Esc>:b8<CR>
imap <A-9> <Esc>:b9<CR>
imap <A-0> <Esc>:b10<CR>
imap <C-Tab> <Esc>:bn<CR>
imap <S-C-Tab> <Esc>:bp<CR> 

Trik spočívá v tom, že na klávesy Alt plus 1 až0 máte namapovány příkazy pro přechod do bufferů s odpovídajícími čísly. Pro přesun na následující/před­cházející buffer v pořadí se mapuje navíc dvojice Ctrl+Tab/Shif­t+Ctrl+Tab. Díky přidaným mapováním imap zkratky fungují i v insert módu.

Pokračování příště…

Michal Burda

Michal Burda

Michal Burda vystudoval informatiku a aplikovanou matematiku a nyní pracuje na Ostravské univerzitě jako odborný asistent. Zajímá se o data mining, Javu a Linux.

Školení: Návrh a používání MySQL databáze

 

Naučte se používat jednu z nejrozšířenějších databází. Dozvíte se vše potřebné od návrhu až po samotné využití MySQL v projektech.

Školení pro všechny, kteří se chtějí naučit efektivně pracovat s MySQL nebo se v práci s touto databází zlepšit.

Přihláška a podrobné informace

Ohodnoťte jako ve škole:
Průměrná známka 2,78

Přehled názorů

bez titulku
Petr Mach 2. 12. 2003 02:16
Nový
├ 
Re:
honza 2. 12. 2003 09:41
Nový
│
├ 
Re:
Yeti 2. 12. 2003 10:44
Nový
│
└ 
Re:
Primitif 2. 12. 2003 11:57
Nový
│
 
└ 
Re:
honza 2. 12. 2003 19:49
Nový
├ 
Re:
Johanka 2. 12. 2003 10:20
Nový
│
└ 
Re:
met - Martin Hassman 2. 12. 2003 10:35
Nový
│
 
└ 
Re:
_J 2. 12. 2003 14:47
Nový
│
 
 
└ 
Re:
Petr Mach 2. 12. 2003 23:54
Nový
│
 
 
 
└ 
Re:
Michal Eibl 4. 12. 2003 09:55
Nový
│
 
 
 
 
└ 
Re:
Marcel Svitalský 4. 12. 2003 10:04
Nový
│
 
 
 
 
 
└ 
Re:
_J 4. 12. 2003 10:26
Nový
└ 
UTF-8
jogo 2. 12. 2003 15:45
Nový
 
├ 
Re: UTF-8
RWS 2. 12. 2003 16:09
Nový
 
└ 
Re: UTF-8
Milan Vančura 9. 12. 2003 11:42
Nový
Problem s langmap a par dotazu
Dave 2. 12. 2003 08:25
Nový
└ 
Re: Problem s langmap a par dotazu
RWS 2. 12. 2003 16:13
Nový
pisanie diakritiky
rajo 2. 12. 2003 09:07
Nový
midnight commander
TomasDean 2. 12. 2003 09:25
Nový
├ 
Re: midnight commander
honza 2. 12. 2003 09:35
Nový
│
└ 
Re: midnight commander
kmarty 2. 12. 2003 17:47
Nový
│
 
└ 
Re: midnight commander
Pichi 2. 12. 2003 18:02
Nový
│
 
 
└ 
Re: midnight commander
Honza 3. 12. 2003 07:45
Nový
├ 
Re: midnight commander
michal 2. 12. 2003 09:37
Nový
└ 
Re: midnight commander
Pichi 2. 12. 2003 09:40
Nový
 
└ 
Re: midnight commander
tdx 2. 12. 2003 12:01
Nový
 
 
└ 
Re: midnight commander
pc 2. 12. 2003 18:03
Nový
bez titulku
Michal Krause 2. 12. 2003 09:42
Nový
├ 
Re:
lachtan 2. 12. 2003 13:37
Nový
└ 
Re:
jogo 2. 12. 2003 15:42
Nový
VIM je humus
%$#%@# 2. 12. 2003 10:22
Nový
├ 
Re: VIM je humus
tomas 2. 12. 2003 10:41
Nový
└ 
Re: VIM je humus
David Jez 2. 12. 2003 10:57
Nový
 
├ 
Re: VIM je humus
pooh 2. 12. 2003 11:24
Nový
 
│
└ 
Re: VIM je humus
pc 2. 12. 2003 18:06
Nový
 
└ 
Re: VIM je humus
Pichi 2. 12. 2003 11:26
Nový
 
 
└ 
Re: VIM je humus
David Jez 2. 12. 2003 21:16
Nový
Uložení historie per file
Milan Vančura 2. 12. 2003 10:27
Nový
├ 
Re: Uložení historie per file
Michal Čihař 2. 12. 2003 14:15
Nový
└ 
Re: Uložení historie per file
ludfan 2. 12. 2003 17:35
Nový
vyborny clanek
tomas 2. 12. 2003 10:43
Nový
Vimu není nikdy dost
Marcel Svitalský 2. 12. 2003 11:13
Nový
└ 
Re: Vimu není nikdy dost
Martin Trčka 2. 12. 2003 12:15
Nový
 
└ 
Re: Vimu není nikdy dost
Jindrich 5. 12. 2003 10:58
Nový
Mapovací dvojice
Marcel Svitalský 2. 12. 2003 13:04
Nový
poznamky ve ~/.vimrc
marys 2. 12. 2003 15:31
Nový
└ 
Re: poznamky ve ~/.vimrc
Johanka 2. 12. 2003 15:46
Nový
Skákání po slovech
Pavel Hofman 2. 12. 2003 17:06
Nový
├ 
Re: Skákání po slovech
ludfan 2. 12. 2003 17:19
Nový
│
└ 
Re: Skákání po slovech
Pavel Hofman 2. 12. 2003 17:29
Nový
└ 
Re: Skákání po slovech
Pichi 3. 12. 2003 11:17
Nový
TECO
Yokotashi 2. 12. 2003 18:05
Nový
└ 
Re: TECO
David Jez 2. 12. 2003 21:21
Nový
...
r031n 2. 12. 2003 23:36
Nový
refill-mode ???
lzap 3. 12. 2003 00:18
Nový
└ 
Re: refill-mode ???
rajo 3. 12. 2003 07:54
Nový
 
└ 
Re: refill-mode ???
anonymní uživatel 3. 12. 2003 11:25
Nový
 
 
└ 
Re: refill-mode ???
Milan Vančura 9. 12. 2003 11:54
Nový
Uhlí do Newcastlu?
Vac 3. 12. 2003 00:38
Nový
flamesy a argumenty
Pavel Kysilka 3. 12. 2003 01:01
Nový
vim
Polish 3. 12. 2003 08:01
Nový
Člověk se pořád učí něco nového
Pavel Tišnovský 3. 12. 2003 08:51
Nový
└ 
Re: Člověk se pořád učí něco nového
pafal 7. 12. 2003 20:53
Nový
 
└ 
Re: Člověk se pořád učí něco nového
pafal 7. 12. 2003 20:58
Nový
Dobry, pokracoveni sem!
Ondrej Holecek 3. 12. 2003 12:16
Nový
Ad langmap
kvr 3. 12. 2003 14:29
Nový
└ 
Re: Ad langmap
Pichi 3. 12. 2003 15:41
Nový
BFU vi
Mikuláš Patočka 3. 12. 2003 17:47
Nový
├ 
Re: BFU vi
_J 4. 12. 2003 07:18
Nový
│
└ 
Re: BFU vi
_J 4. 12. 2003 07:23
Nový
└ 
Re: BFU vi
kvr 4. 12. 2003 09:56
Nový
 
└ 
Re: BFU vi
_J 4. 12. 2003 10:23
Nový
Vim a java
marek 8. 12. 2003 13:07
Nový
└ 
Re: Vim a java
Pichi 8. 12. 2003 16:46
Nový
tečka
texas 6. 10. 2007 18:47
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem