Obsah
1. Použití textového editoru Vim ve funkci IDE
2. Změna fontu a řádkování při použití Vimu s GUI
3. Zobrazení čísel řádků, zvýraznění řídicích znaků, zalamování řádků
4. Zvýraznění tabulátorů, záměna tabulátorů za mezery a naopak
6. Práce s manuálovými stránkami
7. Porovnání zdrojových kódů, synchronizace mezi dvěma soubory
8. Vim pracující jako hexa editor?
1. Použití textového editoru Vim ve funkci IDE
Dnešním článkem o textovém editoru Vim volně navážeme na několik seriálů a článků, které již na Rootu o tomto poměrně neobvykle ovladatelném, ale o to výkonnějším textovém editoru vyšly (viz odkazy uvedené v deváté kapitole). Zaměříme se především na ty funkce Vimu, které mohou dobře posloužit vývojářům a navíc si ještě popíšeme některé externí nástroje, které lze současně v Vimem použít. Popis jednotlivých funkcí bude poměrně stručný, protože další informace lze najít přímo v nápovědě Vimu či v manuálových stránkách k externím nástrojům (cílem článku je především upozornit na to, že Vim dané funkce skutečně obsahuje).
Obrázek 1: Úvodní obrazovka textového editoru Vim (přesněji řečeno verze Vimu přeloženého s podporou GTK2 a spuštěného s volbou vim -g).
Dále popsané nástroje využijí především vývojáři vytvářející aplikace v programovacích jazycích C a C++, i když většina dále popsaných funkcí není omezena pouze na tyto programovací jazyky. Práce vývojáře samozřejmě nespočívá pouze v psaní nového zdrojového kódu (ta většinou zabere pouze zlomek času programátora), ale především v úpravách stávajícího kódu, orientaci v obvykle rozsáhlejším projektu s mnoha zdrojovými kódy, porovnávání různých verzí zdrojových textů, překladu programů, opravy chyb při překladu a v neposlední řadě i v ladění aplikace v případě, že se překlad konečně podařil :-) V některých případech taktéž musí vývojáři pracovat s binárními soubory, i když dnes se již nejedná o tak častou činnost, jako tomu bylo v minulosti. Prakticky všechny výše popsané operace lze provádět přímo ve Vimu, přičemž některé z těchto operací – především se jedná o navigaci v projektu, editaci binárních souborů a taktéž o ladění programů – vyžadují spolupráci s externími nástroji, s nimiž Vim dokáže efektivně komunikovat.
Obrázek 2: Zobrazení seznamu všech chyb generovaných při překladu projektu pomocí nakonfigurovaného překladače (například gcc) či pomocného nástroje pro překlad (make). Povšimněte si, že si Vim pamatuje nejenom číslo řádku, na kterém překladač nahlásil chybu, ale i jméno příslušného zdrojového souboru. Způsob použití tohoto nástroje si popíšeme příště.
Poznámka: s ovladatelností a naučitelností Vimu to ve skutečnosti není tak špatné :-)
2. Změna fontu a řádkování při použití Vimu s GUI
Před popisem vlastních „programátorských“ nástrojů si řekneme, jakým způsobem je možné nastavit font vhodný pro editaci zdrojových kódů. Pokud je Vim spouštěn z terminálu bez použití volby -g, spustí se přímo v okně terminálu, tj. je použit font zvolený pro daný terminál. Ovšem pokud je Vim spuštěn příkazem gvim, popř. vim -g, otevře se editační plocha v samostatném okně, což s sebou přináší i další výhody (například konfigurovatelnou myš, možnost mapování kláves, které by v terminálu nebylo možné použít atd.). Pro gvim lze font nastavit přímo v konfiguračním souboru .vimrc nebo .gvimrc následujícím způsobem:
:set guifont=DejaVu\ Sans\ Mono\ 12
Povšimněte si způsobu zápisu mezer. gvim taktéž umožňuje zvolit si font i jeho velikost pomocí interaktivního dialogu; postačuje v příkazovém režimu napsat následující příkaz:
:set guifont=*
Poznámka: pokud vyžadujete menší nebo naopak větší mezeru mezi jednotlivými řádky, lze použít volbu:
:set linespace=počet_pixelů
Implicitní hodnota je nula, nastavit lze jak kladné číslo (zvětšení mezery), tak i číslo záporné (zmenšení mezery, pozor na slití řádků dohromady!).
Obrázek 3: Nastavení fontu v případě, že je textový editor Vim přeložen s podporou grafického uživatelského rozhraní (editor tedy neběží v terminálu, ale v samostatném okně, které může v případě potřeby obsahovat i menu, záložky a posuvné lišty – scrollbary).
3. Zobrazení čísel řádků, zvýraznění řídicích znaků, zalamování řádků
Při editaci různých zdrojových textů nebo konfiguračních souborů se vyskytnou situace, v nichž je nutné zjistit resp. zobrazit čísla programových řádků. V některých případech může dostačovat zobrazení čísla řádku, na kterém se v daném okamžiku nachází textový kurzor. Číslo řádku a současně i číslo sloupce, na němž je umístěn kurzor, se většinou zobrazuje na takzvaném pravítku (ruler) v pravé dolní části okna dokumentu. Nejdříve je zobrazeno číslo textového řádku, po něm číslo sloupce následované relativní pozicí v souboru zadané v procentech (popř. se namísto procent zobrazují zprávy Top, Bot či All). Pokud pravítko není zobrazeno, může to znamenat, že se editor nachází v takzvaném režimu kompatibility s původním starodávným editorem vi. Režim kompatibility lze snadno vypnout, ať již přímo v příkazovém režimu, tak i v konfiguračních souborech .vimrc/.gvimrc, které Vim standardně hledá v domácím adresáři (na Windows se jedná o soubory _vimrc a _gvimrc):
:set nocompatible
V případě, že ani po zadání tohoto příkazu není pravítko zobrazeno a příkaz :set compatible? vrací text nocompatible, můžete využít příkazy:
:set ruler :set statusline=
První příkaz zapne použití pravítka, druhý příkaz (pro jistotu) nastaví implicitní tvar informací zobrazených na pravítku (viz též :help statusline). Občas nastanou situace, kdy by bylo vhodné si zobrazit čísla všech řádků (jedná se o čísla fyzických řádků, ne zalomených obrazovkových řádků). I v tomto případě nabízí Vim snadné řešení:
:set number
popř. pro ty línější z nás:
:se nu
Obrázek 4: Zobrazení čísel řádků ve zdrojovém souboru pomocí volby :set number
V závislosti na typu editovaného souboru je možné přepínat mezi různými režimy zalamování řádků:
:set wrap " pouze vizuální zalamování (do souborů se nevkládá CR) :set nowrap " vypnutí vizuálního zalamování :set linebreak " vizuální zalamování na hranicích slov (vhodné pro texty, méně pro zdrojové kódy) :set nolinebreak " vypnutí vizuálního zalamování na hranicích slov :set tw=xxx " automatické zalamování na xxx sloupci (vkládá se CR)
Další v některých případech užitečnou volbou je zobrazení běžně neviditelných řídicích znaků, především znaku pro konec řádku a znaku tabulátoru. Pro zobrazení těchto znaků lze využít následující příkaz:
:set list
který znaky tabulátoru zobrazí jako ^I a konec řádku jako $. Tento režim zobrazení se někdy využívá při editaci souborů Makefile, v nichž je z historických důvodů rozlišován tabulátor od mezer. Režim lze taktéž využít při hledání přebytečných mezer na konci řádků, které vznikají například při kopii textu mezi terminálem či webovou stránkou a textovým editorem. Malá nápověda – přebytečné mezery na koncích řádků je možné odstranit například touto substitucí (zadávanou opět v příkazovém režimu):
%s/ \+$//g
Volba :set list sice koliduje s volbou :set linebreak, ovšem v naprosté většině případů se tato druhá volba při editaci zdrojových kódů stejně nepoužívá.
Obrázek 5: Zobrazení řídicích znaků ve zdrojovém souboru pomocí volby :set list.
4. Zvýraznění tabulátorů, záměna tabulátorů za mezery a naopak
O základním způsobu zvýraznění znaku tabulátoru jsme se již stručně zmínili v předchozí kapitole, ovšem řešení nabízené volbou :set list nemusí vždy vyhovovat v každé situaci, především z toho důvodu, že se celý text na obrazovce po zadání této volby vizuálně přeformátuje (zvláště nepříjemné je to v situaci, kdy uživatelé kombinují odsazení pomocí mezer s odsazením s využitím tabulátorů). Ovšem i v tomto případě Vim nabízí alternativní řešení, které spočívá ve využití interního engine používaného při obarvovaní textu na základě syntaktické (spíše však pouze jednodušší lexikální) analýzy textů. V konfiguračním souboru .(g)vimrc nebo v příkazovém režimu postačuje vytvořit nová pojmenovaná pravidla a posléze těmto pravidlům přiřadit libovolnou barvu pozadí (barvu popředí netřeba nastavovat, protože tabulátor se zobrazuje jako několik mezer).
Obrázek 6: Tabulátory se v tomto zdrojovém souboru zobrazují jako mezery, volba tabstop má hodnotu 4.
Následující čtveřice příkazů zkopírovaná z mého konfiguračního souboru .vimrc nastaví světlezelenou barvu pozadí pro jeden znak tabulátoru a světle červenou barvu pozadí pro dva za sebou zapsané tabulátory. Barva pozadí je nastavena jak pro běžný terminál, tak i pro případ, že je textový editor Vim spuštěn pomocí příkazů gvim nebo vim -g, tedy tak, aby využíval vlastní okno s GUI:
syn match Tab "\t" syn match Tab2 "\t\t" hi def Tab ctermbg=lightgreen guibg=#e0ffe0 hi def Tab2 ctermbg=lightred guibg=#ffe0e0
Samozřejmě je možné si zvýraznit pouze libovolně dlouhou sekvenci tabulátorů jednou barvou, tj. odstranit pravidlo Tab2, popř. si stejným způsobem vytvořit pravidla pro delší sekvence – vše záleží na požadavcích programátora.
Obrázek 7: Tabulátory se v tomto zdrojovém souboru zobrazují jako mezery, volba tabstop má hodnotu 8.
S tabulačními zarážkami vkládanými do zdrojových textů mohou nastat různé problémy, především na projektech, v nichž jsou textové soubory sdíleny mezi více vývojáři používajícími různé textové editory a IDE (přesněji řečeno různá nastavení těchto nástrojů). Pokud se pracuje se zdrojovým textem vytvořeným v editoru s nastavenou jinou „délkou“ tabulační zarážky, je možné Vim jednoduše překonfigurovat následující volbou, v níž se za xxx doplní příslušný sloupec, na němž má být tabulační zarážka umístěna (většinou se používá hodnota 4 nebo 8):
:set tabstop=xxx
Mnozí vývojáři by se nejraději všech znaků tabulátoru ve zdrojových textech zbavili nadobro (viz též nekonečné flamewar na toto téma vycházející pravděpodobně z Wadlerova zákona), což lze ve Vimu snadno provést. Nejprve je vhodné nastavit vhodnou hodnotu tabstop (viz odstavec výše) a poté provést sekvenci příkazů:
:set expandtab :retab
Poznámka: tyto příkazy nepoužívejte na soubory Makefile, neb lučebník by se mohl dožít nemilého překvapení.
Poznámka 2: zpětný převod mezer na tabulátory lze taktéž provést, ovšem u příkazu retab se musí na jeho konec zapsat vykřičník:
:set tabstop=4 :set noexpandtab :retab!
Obrázek 8: Zvýraznění tabulátorů pomocí změny barvy pozadí.
5. Navigace ve zdrojovém kódu
Konečně se dostáváme k zajímavějším technikám, které textový editor Vim vývojářům nabízí. Pro lepší orientaci v rozsáhlejším projektu lze využít takzvané soubory značek (tags), které jsou generované externím nástrojem ctags (http://ctags.sourceforge.net/), jenž dokáže rozpoznat celou řadu programovacích jazyků, samozřejmě včetně klasického céčka a C++. Pokud se tento nástroj spustí v adresáři se zdrojovými kódy příkazem:
ctags
popř. pro projekt obsahující zdrojové soubory umístěné v podadresářích příkazem:
ctags -R
vygeneruje se v aktuálním adresáři (což by měl být hlavní adresář se zdrojovými kódy) textový soubor nazvaný tags se speciálním formátem, který obsahuje jména identifikátorů ve zdrojovém programu a výraz, jenž lze použít pro nalezení deklarace tohoto identifikátoru (konkrétní podoba tohoto souboru nás většinou nemusí zajímat, protože se jedná o soubor automaticky zpracovávaný Vimem, popř. i dalšími nástroji). Identifikátorem jsou zde myšleny například jména funkcí, jména struktur či datových typů, makra atd. Pokud vývojář ve zdrojovém textu uvidí například volání neznámé funkce, může použít jeden z následujících příkazů pro přeskok na deklaraci této funkce:
# | Příkaz | Poznámka |
---|---|---|
1 | :tag jméno funkce | lze zadat i regulárním výrazem |
2 | g+Levé tlačítko myši | nefunkční v terminálu |
3 | Ctrl+Levé tlačítko myši | nefunkční v terminálu |
4 | Ctrl+] | ve vizuálním režimu podobné :tag |
Obrázek 9: Nastavení kurzoru nad název funkce.
Na první pohled by se mohlo zdát, že po použití jednoho z výše uvedených příkazů se programátor nenávratně ztratí v haldě zdrojových kódů a už nenajde cestu zpět. Ve skutečnosti se však při skoku na deklaraci uloží původní pozice kurzoru do interního zásobníku, takže je návrat velmi snadný – poslouží klávesová zkratka CTRL+T. Pro výpis celého zásobníku se používá příkaz:
:tags
Aktuální položka v tomto zásobníku je označena znakem >
Obrázek 10: Po stisku klávesové zkratky Ctrl+[ se přejde na definici funkce.
Poznámka: zcela stejný způsob navigace mezi množstvím strukturovaných textových souborů používá i vestavěný systém nápovědy ve Vimu spuštěný příkazem :help, popř. :help jméno_příkazu. Důvod je jednoduchý – v adresáři s nápovědou (například se může jednat o adresář /usr/share/vim/vim72/doc) je mj. uložen i soubor tags, který spolu s vlastním formátem souborů s nápovědou zaručuje skoky na její jednotlivá témata.
6. Práce s manuálovými stránkami
Při programování v céčku či C++ se samozřejmě často volají i funkce ze standardních knihoven, popř. z dalších knihoven nainstalovaných v systému. Čistě teoreticky je možné vytvořit si soubor tags i pro tyto knihovny nebo pro jejich hlavičkové soubory pomocí volby:
ctags -R /usr/lib/include
což však přináší poměrně velké problémy, protože vygenerovaný soubor tags je obrovský (jeho velikost hravě překračuje jeden gigabajt) a práce s ním je pomalá a mnohdy zcela nemožná. Ve skutečnosti však většinou není nutné, aby programátor viděl přímo implementace (těla) všech funkcí ze standardních knihoven, proto je možné využít jiný nástroj Vimu – jedná se o možnost zobrazení manuálové stránky pro identifikátor, který se nachází pod textovým kurzorem – kurzor postačuje přemístit na identifikátor a v normálním režimu stlačit klávesovou kombinaci Shift+K (tj. velké písmeno K). K funkcím ze standardní knihovny jsou manuálové stránky dostupné, postačuje je pouze nainstalovat z balíčku pojmenovaného man-pages, man-pages-dev, manpages-dev apod. Ve Fedoře nebo RHELu je možné tento balíček nainstalovat následujícím příkazem:
sudo yum install man-pages
Na Ubuntu by měl pracovat tento příkaz:
sudo apt-get install manpages-dev
Obrázek 11: Výpis tagů (značek) uložených na zásobníku.
Pokud je textový editor Vim spuštěn v terminálu, je při zobrazení manuálové stránky zavolán příkaz man, takže se při prohlížení mohou použít všechny klávesové zkratky této aplikace; ovšem v gvimu (vim -g) se při zobrazení manuálové stránky pouze volají externí filtry, které stránku naformátují a v okně editoru se zobrazí standardní výstup těchto filtrů. Z tohoto důvodu je dostupných pouze několik klávesových zkratek použitelných při prohlížení dokumentace.
Funkci příkazu Shift+K lze snadno upravit nastavením parametru keywordprg, například následujícím způsobem:
:set keywordprg=info
Obrázek 12: Vyvolání manuálové stránky přímo z Vimu pomocí klávesy K.
7. Porovnání zdrojových kódů, synchronizace mezi dvěma soubory
V poměrně velkém množství případů se programátoři dostanou do situace, kdy potřebují porovnat a popřípadě i synchronizovat dvě různé verze téhož souboru. Může se například jednat o zdrojový kód, konfigurační soubory, SQL skripty, soubory s dokumentací atd. Pro tyto účely lze použít externí utilitu diff a pracovat s daty vygenerovanými touto aplikací, ovšem pro synchronizaci dvou souborů (řízenou vývojářem) je mnohdy výhodnější použít přímo interní nástroj zabudovaný do Vimu. Pokud se tento textový editor spustí s parametrem -d, očekávají se za tímto parametrem jména dvou souborů pro porovnání, popř. jméno souboru a jméno adresáře, v němž se nachází soubor stejného jména:
vim -d test_old.c test_new.c vim -d test.c ../test-sources/
V obou případech textový editor Vim oba soubory skutečně načte do dvojice bufferů, ovšem režim zobrazení se změní takovým způsobem, že se pomocí různých barev zvýrazní ty části souborů, které jsou odlišné. Navíc je možné delší části, jež jsou v obou souborech stejné, „zabalit“ (klávesová zkratka zc).
Obrázek 13: Porovnávání dvou souborů při vertikálním rozdělení oken. Toto rozdělení je vhodné použít v případě, že se jedná o zdrojové soubory s krátkými řádky, popř. pokud máte širokoúhlý monitor.
Barevné zvýraznění změn je sice pěkná a užitečná vlastnost, ovšem to není zdaleka vše, co Vim v „režimu diff“ programátorům nabízí. V tomto režimu jsou totiž k dispozici některé nové příkazy určené pro řízenou synchronizaci mezi soubory. Mezi tyto příkazy patří především:
Příkaz | Význam |
---|---|
[c | skok na začátek předchozího bloku se změnami |
]c | skok na začátek následujícího bloku se změnami |
dp | pokud se kurzor nachází na řádcích, které se v obou souborech odlišují, je změna z aktuálního souboru přenesena do souboru druhého |
do | opak předchozího příkazu – získání změny z druhého souboru a přenesení této změny do souboru aktuálního (tj. do souboru, v němž se nachází textový kurzor) |
:diffupdate | tento příkaz provede nové vyhodnocení rozdílů mezi oběma soubory, vhodné v případech, kdy se oba buffery rozsynchronizují |
Příkazy dp a do lze použít i ve chvíli, kdy je vybraný blok textu. V tomto případě se změna aplikuje pouze na vybrané řádky, nikoli na celý blok změn.
Obrázek 14: Porovnávání dvou souborů při horizontálním rozdělení oken, které je vhodné využít v případě, že porovnávané zdrojové kódy (nebo jiné texty) obsahují dlouhé řádky.
8. Vim pracující jako hexa editor?
Poslední pomůckou, kterou si dnes ukážeme, je způsob editace binárních souborů. Textový editor Vim sice není přímo určen pro editaci binárních dat, ovšem v kombinaci s externím nástrojem xxd ho lze využít jako hexa editor, protože xxd pracuje jako filtr převádějící binární data na jejich hexadecimální, osmičkovou či binární podobu a dokáže provést i zpětný převod. Pokud se při zavolání xxd použije volba -g 1, bude na standardní výstup vytištěn transformovaný obsah souboru rozdělený na jednotlivé bajty. Každý vytištěný řádek je rozdělený na tři části: adresu prvního bajtu na řádku, šestnácti hexadecimálních čísel reprezentujících jednotlivé bajty a sadu šestnácti znaků z původního souboru (počet bajtů/znaků lze měnit, šestnáct je však historicky nejpoužívanější hodnota); viz též následující výpis „hexa“ podoby bajtkódu jednoduché testovací Javovské třídy:
0000000: ca fe ba be 00 00 00 32 00 0f 0a 00 03 00 0c 07 .......2........ 0000010: 00 0d 07 00 0e 01 00 06 3c 69 6e 69 74 3e 01 00 ........<init>.. 0000020: 03 28 29 56 01 00 04 43 6f 64 65 01 00 0f 4c 69 .()V...Code...Li 0000030: 6e 65 4e 75 6d 62 65 72 54 61 62 6c 65 01 00 04 neNumberTable... 0000040: 6d 61 69 6e 01 00 16 28 5b 4c 6a 61 76 61 2f 6c main...([Ljava/l 0000050: 61 6e 67 2f 53 74 72 69 6e 67 3b 29 56 01 00 0a ang/String;)V... 0000060: 53 6f 75 72 63 65 46 69 6c 65 01 00 09 54 65 73 SourceFile...Tes 0000070: 74 2e 6a 61 76 61 0c 00 04 00 05 01 00 04 54 65 t.java........Te 0000080: 73 74 01 00 10 6a 61 76 61 2f 6c 61 6e 67 2f 4f st...java/lang/O 0000090: 62 6a 65 63 74 00 21 00 02 00 03 00 00 00 00 00 bject.!......... 00000a0: 02 00 01 00 04 00 05 00 01 00 06 00 00 00 1d 00 ................ 00000b0: 01 00 01 00 00 00 05 2a b7 00 01 b1 00 00 00 01 .......*........ 00000c0: 00 07 00 00 00 06 00 01 00 00 00 01 00 09 00 08 ................ 00000d0: 00 09 00 01 00 06 00 00 00 19 00 00 00 01 00 00 ................ 00000e0: 00 01 b1 00 00 00 01 00 07 00 00 00 06 00 01 00 ................ 00000f0: 00 00 03 00 01 00 0a 00 00 00 02 00 0b .............
Obrázek 15: Textový editor Vim při zobrazení binárního souboru po jeho filtraci přes externí nástroj xxd. Pokud je Vim správně nakonfigurován, dokáže při ukládání souboru provést automatickou zpětnou filtraci z hexa formátu do binárního tvaru. Mimochodem – dokáže někdo uhodnout, jaký binární soubor je editovaný?
Ruční použití filtru xxd s přesměrováním standardního výstupu je však zbytečně složité a vzhledem k tomu, že si my uživatelé Vimu rádi věci ulehčíme (jinak by stačil Notepad :-), je možné využít automatické příkazy volané při načítání, popř. při ukládání souborů. Následující sekvence příkazů zapsaná do konfiguračního souboru .vimrc zajistí, že se při načítání souborů *.class tyto soubory automaticky převedou do hexa podoby a při ukládání se opět transformují do původní podoby binární:
" vim -b : edit binary using xxd-format! augroup Binary_Java_Class au! au BufReadPre *.class let &bin=1 au BufReadPost *.class if &bin | %!xxd -g1 au BufReadPost *.class set ft=xxd | endif au BufWritePre *.class if &bin | %!xxd -g1 -r au BufWritePre *.class endif au BufWritePost *.class if &bin | %!xxd -g1 au BufWritePost *.class set nomod | endif augroup END
Pro dnešek je to vše, příště si ukážeme, jak lze využít nástroj cscope, provádět překlad projektů a jak využít vyspělou sadu maker c.vim.
9. Odkazy na Internetu
- Vim home page
http://www.vim.org/ - Exuberant ctags
http://ctags.sourceforge.net/ - xxd (man page)
http://www.linux-tutorial.info/modules.php?name=ManPage&sec=1&manpage=xxd - vim (man page)
http://www.linux-tutorial.info/modules.php?name=ManPage&sec=1&manpage=vim - ctags (man page)
http://www.linux-tutorial.info/modules.php?name=ManPage&sec=1&manpage=ctags - cscope (man page)
http://www.linux-tutorial.info/modules.php?name=ManPage&sec=1&manpage=cscope - Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
http://www.thegeekstuff.com/2009/01/tutorial-make-vim-as-your-cc-ide-using-cvim-plugin/ - c.vim : C/C++ IDE
http://vim.sourceforge.net/scripts/script.php?script_id=213 - c.vim : C/C++ IDE key mappings
http://lug.fh-swf.de/vim/vim-c/c-hotkeys.pdf - Základní základy editoru Vim
http://www.root.cz/clanky/zakladni-zaklady-editoru-vim/ - Jak si přizpůsobit Vim
http://www.root.cz/serialy/jak-si-prizpusobit-vim/ - Novinky ve VIM 7: Úvodní část – speller
http://www.root.cz/vim-sedm-prvni-cast/ - Novinky ve VIM 7: Skriptovací jazyk
http://www.root.cz/vim-sedm-druha-cast/ - vim2elvis: Přednosti a nedostaky Elvise v porovnání s Vimem
http://www.root.cz/clanky/vim2elvis-1/ - vim2elvis: Shodné znaky mezi Elvisem a Vimem, nastaveníeditoru
http://www.root.cz/clanky/vim2elvis-2/ - Nej… VIM pluginy (1)
http://www.root.cz/clanky/nej-vim-pluginy/