Textový editor Vim jako IDE (4.část)

Pavel Tišnovský 21. 7. 2011

Ve čtvrté části seriálu o textovém editoru Vim (nejenom) ve funkci vývojového prostředí se budeme zabývat prací se značkami, včetně ukládání značek do souboru .viminfo. Poté si popíšeme práci s registry a ukážeme si, jak nakonfigurovat obarvení zdrojových kódů. Na to navážeme příště definicí syntaktických kategorií.

Obsah

1. Značky a způsob jejich použití při editaci souborů

2. Příkazy pro práci se značkami

3. Automatické ukládání značek do souboru .viminfo

4. Využití pojmenovaných registrů ve Vimu

5. Práce s registry prakticky

6. Speciální registr =

7. Změna způsobu obarvení zdrojových kódů

8. Zvýraznění řádku a/nebo sloupce, na němž se nachází kurzor

9. Odkazy na Internetu

1. Značky a způsob jejich použití při editaci souborů

V předchozí části seriálu o textovém editoru Vim jsme si popsali některé příkazy a nastavení používaná zejména při editaci a automatickém odsazování zdrojových kódů. Taktéž jsme se zabývali popisem technologie nazvané „omni completion“, která byla do Vimu přidána v jeho sedmé verzi. Dnes budeme pokračovat v popisu dalších vlastností tohoto neobyčejného textového editoru. Začneme relativně jednoduchou věcí – takzvanými značkami (marks. Nejedná se však o značky vytvářené externími nástroji a ukládané většinou do souboru pojmenovaného tags, ale o interní seznam pozic kurzoru (jakési „špendlíky“ zapíchnuté do důležitých míst) v souboru, na které se lze během editace vrátit, nebo na něž se lze odkazovat. Podobnou funkcionalitu nabízí i mnohé další programátorské textové editory, ovšem u nich se většinou jedná o maximálně deset značek, zatímco ve Vimu může být značek mnohem více, protože každé značce je přiřazeno jednopísmenné označení.

Obrázek 1: Příkaz :marks vypíše všechny platné značky pro právě aktivní buffer.

V rámci jednoho souboru lze lokálně používat značky pojmenované malými písmeny a až z, zatímco značky pojmenované velkými písmeny A až Z si „pamatují“ i jméno souboru, v němž jsou definovány, tudíž se jedná o značky globální. Speciální význam mají značky se jmény 0 až 9 (naplňované většinou při ukončování Vimu) a taktéž v některých případech velmi užitečná značka ". Významy některých jmen značek (ve skutečnosti jich je ještě mnohem více) jsou vypsány v následující tabulce:

Jméno značky Definice značky Význam
a-z manuálně značky lokální v rámci souboru
A-Z manuálně značky globální, ke značce je připojeno i jméno souboru
0–9 automaticky posledních deset pozic kurzoru při opuštění Vimu
< automaticky začátek vybraného bloku
> automaticky konec vybraného bloku
" automaticky pozice kurzoru při zavření bloku
^ automaticky pozice kurzoru, na níž se kurzor naposledy nacházel ve vkládacím režimu

Obrázek 2: Příklad výstupu příkazu :marks v případě, že jsou definovány čtyři globální značky A, B, C a Z.

2. Příkazy pro práci se značkami

Práce se značkami je v mnoha ohledech velmi jednoduchá, ostatně všechny důležité příkazy najdete v následující tabulce:

Příkaz Význam
:marks výpis všech právě aktivních značek
:marks značka výpis vybrané značky
ma – mz definice lokální značky a-z
mA – mZ definice globální značky A-Z
'a – 'z skok na řádek, kde je značka definovaná (jedná se o příkaz pohybu kurzoru!)
'A – 'Z skok na soubor a řádek, kde je značka definovaná
`a – `z skok na přesné místo, kde je značka definovaná (jedná se o příkaz pohybu kurzoru!)
'A – 'Z skok na přesné místo (řádek i sloupec), kde je značka definovaná

Povšimněte si, že při práci s českou klávesnicí se znaky apostrofu a zpětného apostrofu špatně zapisují. Ovšem, podobně jako u mnoha dalších operací, i zde je možné použít mapování. V případě, že mají být funkce kláves stejné, jako na anglické klávesnici (myšleno je tím to, že se použije stejná fyzická klávesa, což je při častém přepínání rozložení klávesnice zajisté žádoucí vlastnost), poslouží tyto příkazy:

:map § '
:map ;; `

Středník je zdvojený naschvál, aby se nezrušila jeho obvyklá funkce, tj. opakování vyhledávacího příkazu t či f. Pokud tuto funkci nepoužíváte, není ke zdvojení středníku samozřejmě důvod.

Obrázek 3: Výsledek příkazu v'a v případě, že je značka a definována.

V předchozí tabulce bylo uvedeno, že příkazy 'a - 'z i `a`z jsou chápané jako příkazy pro pohyb kurzoru, což znamená, že tyto příkazy lze kombinovat například s editačními operátory d (delete), y (yank) a c (change). To je velmi užitečné, protože lze snadno vytvořit (lépe řečeno pouze označit) začátek „bloku“, například příkazem ma a posléze je možné kurzor přesunout na konec bloku a zvolit jeden z následujících příkazů (užitečnost ještě mnohem více stoupá při použití značek v makrech):

Příkaz Význam
c`a přepis části textu, jehož začátek je označený značkou a a konec je určený aktuální pozicí textového kurzoru
d`a výmaz části textu, jehož začátek je označený značkou a a konec je určený aktuální pozicí textového kurzoru
y`a vložení části textu, jehož začátek je označený značkou a a konec je určený aktuální pozicí textového kurzoru, do implicitního registru (bližší informace o registrech budou uvedeny v navazujícím textu)
gu`a změna na malá písmena
gu`a změna na velká písmena
gq`a zformátování bloku (jako textu)
=`a zformátování bloku (jako zdrojového kódu)

Obrázek 4: Výsledek příkazu gU'a v případě, že je značka a definována.

3. Automatické ukládání značek do souboru .viminfo

Důležitý a příjemný je fakt, že značky dokážou při správném nastavení konfigurace textového editoru „přežít“ i ukončení Vimu, protože mohou být automaticky uloženy do souboru .viminfo. Mimochodem: do tohoto souboru si textový editor Vim ukládá i další důležité stavové informace, pozor tedy na to, že může obsahovat i citlivé informace přenášené přes registry. Pokud například ve svém konfiguračním souboru .vimrc uvedete následující příkaz:

set viminfo='20,\"50,n~/.viminfo

…bude se v souboru pojmenovaném .viminfo vytvářeném v domácím adresáři ukládat informace o značkách pro posledních dvacet editovaných souborů. Toto číslo lze samozřejmě zvětšit, celková velikost souboru .viminfo totiž není v naprosté většině případů nijak kritická. Pro zajímavost, jak vypadá část souboru .viminfo s uloženými značkami. Nejprve jsou v něm uloženy informace o globálních značkách, kde se kromě čísla řádku a čísla sloupce ukládá i jméno souboru:

# File marks:
'A  4  0  ~/reports/mail-daily-report.sh
'Z  91  4  ~/reports/daily_report.txt
'0  91  4  ~/reports/daily_report.txt
'1  4  0  ~/reports/mail-daily-report.sh
'2  163  7  ~/temp/_viminfo
'3  1  0  ~/disable_selinux.sh
'4  50  0  /var/log/messages
'5  1  0  /var/log/messages
'6  29  0  /var/www/html/openjdk/style.css
'7  11  19  /var/www/html/openjdk/jtreg/icedtea6/2011-07-12/jtreg-summary.log
'8  8  0  /var/www/html/openjdk/jtreg/icedtea6/2011-07-08
'9  3  9  ~/reports/Java2Dbenchmark/graph_.sh

Poté se mohou v souboru .viminfo vyskytovat informace o značkách definovaných pro dvacet posledně editovaných souborů. Pro každý soubor je uložen zvláštní seznam značek (to je logické, protože by jinak docházelo ke kolizi jmen):

# History of marks within files (newest to oldest):

> ~/reports/daily_report.txt
        "       91      4
        .       64      0
        +       66      0
        +       67      0
        +       64      0


> ~/reports/mail-daily-report.sh
        "       4       0

> ~/temp/_viminfo
        "       163     7

> ~/disable_selinux.sh
        "       1       0
...
...
...

Obrázek 5: Část obsahu souboru .viminfo s globálními značkami.

Jak je z výše uvedených příkladů patrné, pamatuje si Vim pozici kurzoru jak pro deset naposled editovaných souborů (viz značky 0 až 9), tak i poslední pozici kurzoru pro každý soubor zvlášť ve značce s názvem ". To znamená, že pokud se potřebujeme přesunout přesně na to místo, kde probíhala poslední editace, stačí zadat příkaz:

`"

Vzhledem k velké užitečnosti tohoto příkazu je vhodné si ho přidat i do konfiguračního souboru .vimrc:

au BufReadPost * normal `"

Předchozí příkaz znamená, že se po načtení každého souboru (událost BufReadPost) provede příkaz `"normálním režimu, tj. nikoli režimu příkazovém (po au totiž následují příkazy jakoby zadávané s dvojtečkou na začátku). Kdykoli tedy dojde k otevření již dříve editovaného souboru, přesune se kurzor na místo poslední editace.

Obrázek 6: Část obsahu souboru .viminfo se značkami definovanými pro jednotlivé soubory.

4. Využití pojmenovaných registrů ve Vimu

Dalším užitečným a často používaným nástrojem nabízeným textovým editorem Vim jsou takzvané registry. Jedná se o proměnné Vimu pojmenované jedním znakem, které v první řadě slouží pro kopii či přenos editovaných textů pomocí příkazů c (change), s (substitute), d (delete), y (yank) a p (paste), což vlastně znamená, že registry lze využít ve funkci pojmenovaných schránek (clipboard). Druhou funkcí, které registry v tomto textovém editoru mají, je úschova maker, která se zaznamenávají příkazem q a vyvolávají se (spouští se) příkazem @ (za těmito příkazy vždy následuje jméno registru, v němž je makro uschováno). Podobně jako v případě značek, existují registry naplňované uživatelem a registry, jejichž obsah je měněn textovým editorem automaticky při provádění různých operací. Jména a význam některých důležitých registrů můžete najít v následující tabulce:

Registr Význam
a-z registry, které je možné přímo měnit uživatelem
0–9 registry naplňované automaticky příkazy dy
% registr obsahující jméno právě editovaného souboru
: registr obsahující poslední příkaz, vhodné při vyvolání tohoto příkazu jako makra
= pseudoregistr používaný pro výpočet matematických a „řetězcových“ výrazů
* registr obsahující obsah schránky (viz též sedmou kapitolu s vysvětlením)
+ registr obsahující obsah schránky (viz též sedmou kapitolu s vysvětlením)
/ registr obsahující posledně vyhledávaný řetězec (resp. text odpovídající regulárnímu výrazu)
" implicitní registr pro operace c, d, s nebo y
implicitní registr pro operace, které mění menší část textu, než je jeden textový řádek

Obrázek 7: Výpis všech aktuálně definovaných registrů. Povšimněte si, že některé registry ve skutečnosti obsahují makra – jedná se například o registry a, m, qs.

Registry mohou být, podobně jako značky, ukládány při ukončování práce Vimu do souboru .viminfo, kde způsob jejich uložení vypadá zhruba následovně:

# Registers:
"0      LINE    0
        -----------------------------------------------------------------------
"1      LINE    0
                frame.getContentPane().setBackground(Color.yellow);
"2      LINE    0

"3      LINE    0

"4      LINE    0

"5      LINE    0

"6      LINE    0

"7      LINE    0

"8      LINE    0

"9      LINE    0

"a      LINE    0
                frame.getContentPane().setBackground(Color.yellow);
"c      CHAR    0
        O
"m      CHAR    0
        kF
"q      CHAR    0
        gqap
"s      CHAR    0
        E1
""z     CHAR    0
        for (String[] testedString : testedStrings)
"-      CHAR    0

Obrázek 8: Obsah souboru .viminfo s texty uloženými v registrech.

5. Práce s registry prakticky

Pro výpis obsahu všech registrů se používá příkaz :registers nebo taktéž pouze jeho zkrácená forma :reg. Pomocí tohoto příkazu lze samozřejmě zobrazit i obsah maker zaznamenaných s využitím příkazu q. V tabulce zobrazené v předchozí kapitole byl uveden i speciální registr nazvaný prostě " (jde o ASCII uvozovky, nikoli o dvojici apostrofů). Tento registr je implicitně používán při provádění základních editovacích příkazů (či spíše operátorů) c (change), d (delete), y (yank) a p (paste). Pokud se má využít jiný registr, musí se před tyto příkazy napsat " (taktéž uvozovky, ovšem v tomto případě neplést s názvem registru), za nímž následuje jméno vybraného registru. Viz též následující příklady ukazující, jak se poměrně logicky dají ve ViVimu tvořit složité editační operace z jednodušších operátorů a příkazů:

"add
"ap

"b3dw
"bP

"cdas
"cp

"dyap

"zyy
"xS
"q10s

Obrázek 9: Vkládací režim Vimu se na stavovém řádku ohlašuje informací – INSERT –.

Zajímavější (a pravděpodobně i méně známou) možností je však použití velkého písmene namísto písmene malého při uvádění jména registru před příkazy c, dy. V takovém případě se obsah vybraného registru nepřemaže novým obsahem, ale naopak se připojí na konec původního obsahu. Tohoto chování lze využít v různých situacích, například při kopiích nekontinuálních bloků textu. Ukážeme si to na jednoduchém příkladu, v němž potřebujeme do bloku/registru vložit řádky s definicemi konstant nazvaných rShift, gShiftbShift:

  1 public class ColorModelRGBA
  2 {
  3     final static int aMask = 0xFF000000;
  4     final static int rMask = 0x00FF0000;
  5     final static int rShift = 16;
  6     final static int gMask = 0x0000FF00;
  7     final static int gShift = 8;
  8     final static int bMask = 0x000000FF;
  9     final static int bShift = 0;

To lze provést následovně (všechny tři příkazy se samozřejmě zapisují za sebou bez stlačení klávesy Enter):

5G"ayy
7G"Ayy
9G"Ayy

Nový obsah registru a je možné vypsat pomocí příkazu:

:reg a

Popř. lze jeho obsah vložit do libovolného místa zdrojového kódu příkazem:

"ap

Obrázek 10: Přepisovací režim Vimu se na stavovém řádku ohlašuje informací – REPLACE –.

V relativně velkém množství případů se stává, že je potřeba obsah některého registru vložit do textu ve vkládacím nebo přepisovacím režimu (insert mode, popř. replace mode). V tomto případě samozřejmě není nutné přecházet do normálního režimu (na což pro jeden příkaz mimochodem existuje zkratka Ctrl+O), ale lze použít mnohem rychlejší řešení: stlačení klávesové zkratky Ctrl+R za níž následuje jméno vybraného registru. Tři řádky zkopírované ze zdrojového kódu do registru a se tedy na aktuální pozici kurzoru vloží přímo ve vkládacím režimu takto:

Ctrl+Ra

Obrázek 11: Přepnutí do normálního režimu z režimu vkládacího pomocí klávesové zkratky Ctrl+O. Hlášení na stavové řádce je – (insert) --, což znamená, že se po provedení jednoho příkazu editor automaticky vrátí zpět do vkládacího režimu.

6. Speciální registr =

Užitečné může být taktéž použití registru, jehož jméno je =. Jedná se o speciální registr, do něhož se neukládá přímo nějaký text příkazem d, s, c či y, ale výsledek aritmetického, popř. „řetězcového“ výrazu. Chování tohoto registru si nejlépe ukážeme na jednoduchém příkladu. Pokud se ve vkládacím režimu použije klávesová zkratka Ctrl+R =, zobrazí se na příkazovém řádku výzva pro zadání nějakého výrazu. Zadejme například něco jednoduchého:

2*(3+4)<Enter>

Textový editor Vim se po stlačení klávesy Enter pokusí o vyhodnocení tohoto výrazu a do editovaného textu vloží jeho výsledek, tj. řetězec „14“ (samozřejmě bez uvozovek).

Vim se sice nesnaží při vyhodnocování výrazů nahrazovat plnohodnotné programovací jazyky či specializované programy typu bc nebo hardcore nástroj dc, i tak však svým uživatelům v této oblasti nabízí poměrně mnoho možností. Především je možné při zápisu výrazů používat velké množství operátorů známých z mnoha dalších programovacích jazyků. Při použití některých operátorů se Vim snaží převádět operandy z řetězců na čísla:

Operátory Význam
+ – * / % běžné aritmetické operátory
|| && ! logické operátory
?: ternární operátor (viz céčko, C++, Javu, JavaScript)
== != > >= < <= relační operátory pro řetězce i čísla

Další operátory se používají především při práci s řetězci a nejsou již tak obvyklé:

Operátory Význam
== porovnání řetězců (viz text pod tabulkou)
=~ test, zda řetězec odpovídá zadanému regulárnímu výrazu (viz text pod tabulkou)
!~ test, zda řetězec neodpovídá zadanému regulárnímu výrazu (viz text pod tabulkou)
. konkatenace (spojení) řetězců

Ve skutečnosti se u všech operátorů porovnávajících řetězce (==, =~, !~) může pomocí postfixového znaku určit, zda se má ignorovat velikost písmen, popř. zda se má použít konfigurační parametr ignorecase. Celkový počet relačních operátorů i operátorů využívajících regulární výraz je tedy poměrně velký, což je ostatně patrné z následující tabulky:

Operátor Použít ignorecase Brát ohled na velikost písma Ignorovat velikost písma
equal == ==# ==?
not equal != !=# !=?
greater than > ># >?
greater than or equal >= >=# >=?
smaller than < <# <?
smaller than or equal <= <=# <=?
regexp matches =~ =~# =~?
regexp doesn't match !~ !~# !~?

7. Změna způsobu obarvení zdrojových kódů

Další funkcí Vimu, kterou se dnes budeme – prozatím alespoň ve stručnosti – zabývat, je způsob nastavení barev, které tento textový editor používá při zvýrazňování jednotlivých syntaktických (lexikálních) částí zdrojových textů. Vim ve své instalaci obsahuje pro různé typy zdrojových textů konfigurační soubory obsahující definice jejich syntaxe, což je problematika, kterou se budeme podrobněji zabývat příště. Ovšem ve chvíli, kdy jsou jednotlivé syntaktické kategorie již vytvořeny, jim lze přiřadit barvu popředí, barvu pozadí a při práci s GUI i typ písma – to vše pomocí příkazu :hi či :highlight. Začneme nejdříve popisem způsobu definice barev v případě, že je Vim spuštěn v terminálu umožňujícím práci s barvami (což dnes umí prakticky všechny emulace terminálů). Zde máme většinou k dispozici osm či šestnáct barev, které lze zadat číslem 0–15 nebo jménem (green, red, …). Nastavit lze barvu popředí pomocí vlastnosti ctermfg (fg=foreground) i barvu pozadí s využitím vlastnosti ctermbg (bg=background).

Obrázek 12: Výpis aktuálně nastavené konfigurace barev pomocí příkazu :highlight.

Syntaxe příkazu highlight je následující:

" příkaz  synt. kategorie  parametry/barvy
highlight Folded           ctermfg=7    ctermbg=8
highlight Comment          ctermfg=12
highlight PreProc          ctermfg=10
highlight Underlined       ctermbg=7    ctermfg=8
highlight htmlItalic       ctermbg=none ctermfg=green

Obrázek 13: Změna barvy pozadí i barvy popředí pro syntaktickou kategorii pojmenovanou Statement.

Při práci v GUI, tj. při jeho spuštění příkazy gvim nebo vim -g, lze barvu písma či barvu pozadí navíc nastavit podobně, jako je tomu v HTML, tj. s využitím trojice barvových složek zapsaných do jednoho šestimístného hexadecimálního čísla. Vlastnost se však v takovém případě nejmenuje cterm*, ale gui*. V grafickém uživatelském rozhraní je navíc možné specifikovat i barvu kurzoru, a to pro kurzor v normálním režimu, kurzor v režimu vkládacím i režimu přepisovacím (osobně volím pro každý režim jinou barvu kurzoru, která tak slouží pro indikaci stavu editoru):

highlight Cursor       guibg=#80ffff guifg=bg
highlight Cursor2      guibg=#ff8080 guifg=bg
highlight Cursor3      guibg=#60e060 guifg=bg
highlight Normal       guifg=#f6f3e8 guibg=#242424
highlight Normal       guifg=#80ff80 guibg=#242424
highlight NonText      guifg=#808080 guibg=#303030
highlight LineNr       guifg=#857b6f guibg=#000000
highlight StatusLine   guifg=#f6f3e8 guibg=#444444
highlight StatusLineNC guifg=#857b6f guibg=#444444
highlight VertSplit    guifg=#444444 guibg=#444444
highlight Folded       guibg=#485058 guifg=#a0a8b0
highlight Title        guifg=#f6f3e8 guibg=NONE
highlight Visual       guifg=#f6f3e8 guibg=#444444
highlight SpecialKey   guifg=#808080 guibg=#343434

highlight Comment      guifg=#99968b
highlight Todo         guifg=#8f8f8f
highlight Constant     guifg=#e5786d
highlight String       guifg=#95e454
highlight Identifier   guifg=#cae682
highlight Function     guifg=#cae682
highlight Type         guifg=#cae682
highlight Statement    guifg=#8ac6f2
highlight Keyword      guifg=#8ac6f2
highlight PreProc      guifg=#e5786d
highlight Number       guifg=#e5786d
highlight Special      guifg=#e7f6da

Obrázek 14: Obarvený zdrojový text po změně barvy popředí i barvy pozadí syntaktické kategorie Statement (viz barva příkazů if a operátoru sizeof).

8. Zvýraznění řádku a/nebo sloupce, na němž se nachází kurzor

V textovém editoru Vim verze 7 se kromě jiných vylepšení objevila i možnost zvýraznění „řádkového“ a/nebo „sloupcového“ kurzoru. Pro povolení zobrazení řádkového kurzoru, tj. zvýraznění celého řádku, na němž se kurzor nachází, je nutné použít příkaz :set cursorline, pro zvýraznění sloupce pak příkaz :set cursorcolumn. Pokud je řádkový a/nebo sloupcový kurzor povolen, lze nastavit jeho barvu (většinou pozadí) následujícím způsobem (jedná se o úryvek kódu z konfiguračního souboru .vimrc, v příkazovém režimu se nemusí podmínka zapisovat, protože si starší verze Vimu samy postěžují, že uvedené konfigurační volby neznají):

if version >= 700
  set cursorcolumn
  set cursorline
  hi CursorLine   guibg=#2d2d2d
  hi CursorColumn guibg=#2d2d2d
endif

Při tvorbě screenshotů 15 a 16 byly použity následující volby, které zvýraznění učinily více kontrastním:

widgety

  hi CursorLine   guibg=darkgreen
  hi CursorColumn guibg=darkred

Obrázek 15: Textový editor Vim se zvýrazněným „řádkovým“ kurzorem.

Obrázek 16: Textový editor Vim se zvýrazněným „řádkovým“ i „sloupcovým“ kurzorem.

9. Odkazy na Internetu

  1. Clewn home page
    http://clewn.sourceforge.net/
  2. How to connect vim with gdb – using clewn
    http://chunhao.net/blog/how-to-connect-vim-with-gdb-using-clewn
  3. yavdb : Yet Another (Generic) Vim Debugger Integration
    http://www.vim.org/scripts/scrip­t.php?script_id=1954
  4. Vim home page
    http://www.vim.org/
  5. Exuberant ctags
    http://ctags.sourceforge.net/
  6. xxd (man page)
    http://www.linux-tutorial.info/modules.php?na­me=ManPage&sec=1&manpage=xxd
  7. vim (man page)
    http://www.linux-tutorial.info/modules.php?na­me=ManPage&sec=1&manpage=vim
  8. ctags (man page)
    http://www.linux-tutorial.info/modules.php?na­me=ManPage&sec=1&manpage=ctags
  9. cscope (man page)
    http://www.linux-tutorial.info/modules.php?na­me=ManPage&sec=1&manpage=csco­pe
  10. Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
    http://www.thegeekstuff.com/2009/01/tu­torial-make-vim-as-your-cc-ide-using-cvim-plugin/
  11. c.vim : C/C++ IDE
    http://vim.sourceforge.net/scrip­ts/script.php?script_id=213
  12. c.vim : C/C++ IDE key mappings
    http://lug.fh-swf.de/vim/vim-c/c-hotkeys.pdf
  13. Základní základy editoru Vim
    http://www.root.cz/clanky/zakladni-zaklady-editoru-vim/
  14. Jak si přizpůsobit Vim
    http://www.root.cz/serialy/jak-si-prizpusobit-vim/
  15. Novinky ve VIM 7: Úvodní část – speller
    http://www.root.cz/vim-sedm-prvni-cast/
  16. Novinky ve VIM 7: Skriptovací jazyk
    http://www.root.cz/vim-sedm-druha-cast/
  17. vim2elvis: Přednosti a nedostaky Elvise v porovnání s Vimem
    http://www.root.cz/clanky/vim2elvis-1/
  18. vim2elvis: Shodné znaky mezi Elvisem a Vimem, nastaveníeditoru
    http://www.root.cz/clanky/vim2elvis-2/
  19. Nej… VIM pluginy (1)
    http://www.root.cz/clanky/nej-vim-pluginy/
  20. Taglist (plugin)
    http://www.vim.org/scripts/scrip­t.php?script_id=273
  21. The NERD tree: A tree explorer plugin for navigating the filesystem
    http://www.vim.org/scripts/scrip­t.php?script_id=1658
  22. JavaBrowser : Shows java file class, package in a tree as in IDEs. Java source browser.
    http://www.vim.org/scripts/scrip­t.php?script_id=588
  23. snippetsEmu : An attempt to emulate TextMate's snippet expansion
    http://www.vim.org/scripts/scrip­t.php?script_id=1318
  24. Scroll Lock (Necyklopedie)
    http://necyklopedie.wikia­.com/wiki/Scroll_lock
  25. Caps Lock (Necyklopedie)
    http://necyklopedie.wikia­.com/wiki/Caps_Lock
  26. Avoid the escape key
    http://vim.wikia.com/wiki/A­void_the_escape_key
  27. Map caps lock to escape in XWindows
    http://vim.wikia.com/wiki/VimTip166
Našli jste v článku chybu?
120na80.cz: Pálení žáhy: která jídla ne a co nás uzdraví?

Pálení žáhy: která jídla ne a co nás uzdraví?

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

Vitalia.cz: Tradiční čínská medicína a rakovina

Tradiční čínská medicína a rakovina

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

DigiZone.cz: Wimbledon na Nova Sport až do 2019

Wimbledon na Nova Sport až do 2019

Vitalia.cz: Pryč se zastaralým stravováním ve školách

Pryč se zastaralým stravováním ve školách

Vitalia.cz: 5 chyb, které děláme při skladování potravin

5 chyb, které děláme při skladování potravin

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

Podnikatel.cz: Babišovi se nedá věřit, stěžovali si hospodští

Babišovi se nedá věřit, stěžovali si hospodští

DigiZone.cz: DVB-T2 ověřeno: seznam TV zveřejněn

DVB-T2 ověřeno: seznam TV zveřejněn

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

DigiZone.cz: Samsung EVO-S: novinka pro Skylink

Samsung EVO-S: novinka pro Skylink

Vitalia.cz: Tahák, jak vyzrát nad zápachem z úst

Tahák, jak vyzrát nad zápachem z úst

DigiZone.cz: Funbox 4K v DVB-T2 má ostrý provoz

Funbox 4K v DVB-T2 má ostrý provoz

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB