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
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
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 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 `" v 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 d a y |
% | 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, q a s.
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 Vi i Vimu 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, d a y. 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, gShift a bShift:
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:
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
- Clewn home page
http://clewn.sourceforge.net/ - How to connect vim with gdb – using clewn
http://chunhao.net/blog/how-to-connect-vim-with-gdb-using-clewn - yavdb : Yet Another (Generic) Vim Debugger Integration
http://www.vim.org/scripts/script.php?script_id=1954 - 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/ - Taglist (plugin)
http://www.vim.org/scripts/script.php?script_id=273 - The NERD tree: A tree explorer plugin for navigating the filesystem
http://www.vim.org/scripts/script.php?script_id=1658 - JavaBrowser : Shows java file class, package in a tree as in IDEs. Java source browser.
http://www.vim.org/scripts/script.php?script_id=588 - snippetsEmu : An attempt to emulate TextMate's snippet expansion
http://www.vim.org/scripts/script.php?script_id=1318 - Scroll Lock (Necyklopedie)
http://necyklopedie.wikia.com/wiki/Scroll_lock - Caps Lock (Necyklopedie)
http://necyklopedie.wikia.com/wiki/Caps_Lock - Avoid the escape key
http://vim.wikia.com/wiki/Avoid_the_escape_key - Map caps lock to escape in XWindows
http://vim.wikia.com/wiki/VimTip166