Obsah
1. Konfigurace a překlad Vimu ze zdrojových kódů
2. Získání zdrojových kódů Vimu
3. Přímý překlad Vimu a možnosti konfigurace provedené před překladem
4. Základní volby při překladu Vimu: rozdělení vlastností do pěti skupin
5. Velikost spustitelného (binárního) souboru s Vimem
7. Přidáváme rozhraní pro různé skriptovací jazyky do Vimu
8. Výpis vlastností Vimu obsažených v jeho různých variantách
1. Konfigurace a překlad Vimu ze zdrojových kódů
V předchozích částech seriálu o textovém editoru Vim jsme se zabývali především popisem uživatelských funkcí nabízených samotným editorem, popř. taktéž popisem některých zajímavých skriptů a maker, která jsou pro Vim dostupná. Dnešní článek však bude určitou výjimkou, protože si řekneme, jakým způsobem lze získat zdrojové kódy Vimu a jak se následně může Vim nakonfigurovat a přeložit. Na první pohled by se sice mohlo zdát, že tuto operaci by měli provádět většinou pouze autoři binárních balíčků pro danou distribuci Linuxu (.dep, .rpm atd.), popř. autoři instalačního balíčku s Vimem určeného pro systémy Microsoft Windows (ftp://ftp.vim.org/pub/vim/pc) a Mac OS X (http://sourceforge.net/projects/macosxvim/files/), ve skutečnosti však může být překlad vlastní binární varianty Vimu mnohdy užitečný i pro jeho samotné uživatele (kteří většinou ani nechtějí či nepotřebují upravovat jeho zdrojové kódy).
Důvodů pro překlad vlastní binární varianty Vimu může být větší množství. Mezi hlavní důvody patří buď snaha o přidání nové vlastnosti do Vimu (například se může jednat o rozhraní k nějakému skriptovacímu jazyku, viz též minulý a předminulý díl tohoto seriálu), použití nejnovější verze Vimu se všemi dostupnými vlastnostmi a záplatami (patchs) nebo naopak snaha o vytvoření takové varianty Vimu, která bude málo náročná na celkovou velikost alokované operační paměti a současně zabere i méně místa na disku, což může být zajímavé například při tvorbě live distribucí (zvláště v případě, pokud někomu nevyhovuje varianta textového editoru Vi v projektu Busybox a podobných nástrojích).
2. Získání zdrojových kódů Vimu
Prvním krokem před spuštěním vlastního překladu Vimu je samozřejmě získání jeho zdrojových kódů a dalších souborů nutných pro překlad (Makefile apod.). Tyto soubory je možné získat různým způsobem, což je ostatně patrné i při letmém pročtení stránky http://www.vim.org/download.php. Kromě tarballů obsahujících různé oficiálně vydané verze zdrojových kódů Vimu, popř. pomocných souborů používaných pro běh Vimu (takzvané runtime balíčky), je možné získat aktuální podobu jeho zdrojových kódů s využitím nástroje pro správu verzí se jménem Mercurial (ten se nyní začíná používat u stále většího množství projektů). Pokud si zvolíte tento způsob získání zdrojových kódů Vimu, musíte si nejprve Mercurial nainstalovat, typicky jedním z následujících příkazů (závislých na použité distribuci):
yum install mercurial apt-get install mercurial zypper mercurial emerge mercurial
Instalaci Mercurialu lze ověřit jednoduchým smoke testem:
hg help
Poznámka: Hg je značka rtuti, anglicky mercury, odtud také pochází jméno příkazu hg
Po úspěšné instalaci Mercurialu se poslední verze zdrojových kódů textového editoru Vim může stáhnout na disk pomocí následujícího příkazu:
hg clone https://vim.googlecode.com/hg/ vim
kde poslední parametr vim určuje adresář, do něhož se obsah repositáře má rozbalit. Pokud se tento parametr neuvede, použije se poslední jméno z URL, tj. hg:
Poznámka: poslední verzi zdrojových kódů je možné procházet na adrese http://code.google.com/p/vim/source/browse/. Podle analýzy provedené na serveru Ohloh je aktivita na tomto projektu stále poměrně vysoká, což je u tak starého (čti stabilního) projektu docela neobvyklé.
3. Přímý překlad Vimu a možnosti konfigurace provedené před překladem
Po získání poslední verze zdrojových kódů Vimu přichází na řadu vlastní překlad. Ten je na Linuxu a dalších operačních systémech vybavených potřebnými GNU nástroji (gcc, gmake, autotools atd.) velmi jednoduchý, protože se zkrátí na dvojici příkazů:
cd vim/src make
Po zadání těchto dvou příkazů by měla proběhnout konfigurace (získání informací o hostitelském systému a dostupnosti potřebných knihoven) a následně překlad a slinkování binárního spustitelného souboru s Vimem. Případné chyby jsou většinou způsobeny tím, že v systému nejsou nainstalovány všechny potřebné vývojové verze knihoven, počínaje libc přes knihovnu ncurses až po knihovny vyžadované pro překlad Vimu s podporou GUI.
Ovšem jak zajisté uznáte, je výše popsaný způsob překladu dosti nudný a hlavně nám nedává žádnou možnost zásahu do průběhu překladu; dokonce není ani možné zvolit konfiguraci výsledné binární podoby Vimu. Proto si v dalším textu popíšeme různé možnosti konfigurace výsledné (binární) podoby Vimu.
Pokud nebudeme brát do úvahy možnost přímého zásahu do zdrojových kódů Vimu, je možné konfiguraci provést libovolnou kombinací následujících čtyř způsobů:
- Použitím některé volby či voleb při spuštění ./configure (asi nejpoužívanější možnost)
- Nastavením parametrů prostředí, které ovlivní překladač a/nebo linker
- Editací souboru src/feature.h (zde je možné individuálně zapnout a vypnout jednotlivé vlastnosti Vimu, soubor je bohatě komentován)
- Editací souboru Makefile (ten je okomentován na místech, kde se nejčastěji provádí změny)
4. Základní volby při překladu Vimu: rozdělení vlastností do pěti skupin
Při překladu Vimu na systémech vybavených vývojovými GNU nástroji autotools je možné před spuštěním make explicitně spustit skript ./configure, který provede detekci překladače, zjistí verze nainstalovaných knihoven atd. Ve skutečnosti se tento skript použije vždy, tj. i když ho explicitně nespustíme, ovšem v tomto případě se připravíme o možnost zadat skriptu různé konfigurační parametry. Základním konfiguračním parametrem, který v největší míře ovlivňuje schopnosti výsledné binární podoby Vimu, je parametr –with-features=XXX, kde se za XXX doplňuje slovo tiny, small, normal, big či huge. Význam tohoto parametru je jednoduchý – každá vlastnost Vimu spadá do jedné z těchto pěti kategorií, přičemž platí, že v nadřazené kategorii jsou všechny vlastnosti ležící i v kategorii nižší. To například znamená, že historie příkazového řádku (zajisté užitečná vlastnost umožňující použít již jednou zadané příkazy) spadá do kategorie small, tudíž ji lze najít i v kategoriích normal, big a huge, nikoli ale v kategorii tiny.
# | Volba pro ./configure | Význam volby |
---|---|---|
1 | --with-features=tiny | Vim je přeložen pouze se základní funkcionalitou, nepodporuje ani historii či doplňování příkazů, ani více oken. Býval použit v šestnáctibitové variantě Vimu pro DOS (protože přece 640kB stačí každému :-) |
2 | --with-features=small | již poněkud užitečnější varianta Vimu, dobře emuluje schopnosti původního editoru Vi, často instalovaná pod jménem vim.tiny (což je poněkud matoucí) |
3 | --with-features=normal | obsahuje všechny běžné vlastnosti Vimu, použit v některých distribucích |
4 | --with-features=big | většina vlastností je povolena, použit v mnoha distribucích v balíčku vim-enhanced |
5 | --with-features=huge | překlad proveden se všemi vlastnostmi (některé ve skutečnosti nemusí být použity, pokud nejsou k dispozici potřebné knihovny). Jedinou věcí, kterou je nutné přidat ručně, jsou rozhraní pro různé skriptovací jazyky. |
5. Velikost spustitelného (binárního) souboru s Vimem
Každá vlastnost Vimu je ve zdrojových kódech představována symbolem preprocesoru definovaným (či naopak nedefinovaným :-) v souboru features.h. V případě již výše zmíněné historie příkazového řádku se jedná o symbol FEAT_CMDHIST. Při spuštění skriptu ./configure je tento symbol buď definován nebo zůstane nedefinován, což je na několika místech zdrojového kódu Vimu detekováno standardně pomocí direktivy #ifdef FEAT_CMDHIST/#endif, ve které je uzavřena část programového kódu, která s historií příkazového řádku souvisí. Díky tomu se při zákazu této vlastnosti (například při překladu Vimu ve variantě tiny) část zdrojového kódu odstraní již při běhu preprocesoru a tudíž se vůbec neobjeví ve výsledném přeloženém binárním souboru (g)vim(.exe). Pro zajímavost se můžeme podívat na to, jak se liší velikost spustitelného binárního souboru vim přeloženého na 32bitové platformě x86 pro různé varianty Vimu. V tabulce níže je uvedena jak velikost binárního souboru ihned po překladu (se všemi symboly), tak i velikost po odstranění těchto symbolů pomocí nástroje strip:
# | Varianta Vimu | Velikost po překladu | Velikost po „strip“ |
---|---|---|---|
1 | tiny | 1592807 | 513600 |
2 | small | 1761057 | 571168 |
3 | normal | 4229575 | 1420128 |
4 | big | 4687868 | 1626216 |
5 | huge | 4709742 | 1634440 |
Překlad byl proveden následujícím způsobem:
cd vim/src ./configure --with-features=tiny make
cd vim/src ./configure --with-features=small make
cd vim/src ./configure --with-features=normal make
cd vim/src ./configure --with-features=big make
cd vim/src ./configure --with-features=huge make
A posléze:
strip vim
6. Spotřeba operační paměti
Velikost binárního spustitelného souboru s Vimem bude pravděpodobně zajímat pouze autory různých live distribucí, ovšem v některých případech je důležitější sledovat velikost operační paměti obsazené při běhu Vimu. Na „nadupaných“ desktopech s gigabajty operační paměti je to samozřejmě téměř bezpředmětné, ovšem na menších zařízeních může být každý ušetřený megabajt (když už ne kilobajt) znatelný. A rozdíly mezi různými variantami Vimu mohou být skutečně značné, což je ostatně patrné i při pohledu na tabulku zobrazenou níže. V této tabulce je zobrazena špička ve spotřebě paměti i velikost RSS, tj. skutečně obsazená fyzická paměť. Z této tabulky mj. vyplývá například to, že na 32bitové platformě x86 v podstatě nemá smysl se trápit se spartánskou verzí tiny (určené původně hlavně pro 16bitový DOS s 640kB RAM), protože rozdíl ve spotřebě paměti mezi tiny a small (kde již jsou obsaženy všechny nejdůležitější vlastnosti) je minimální. Poměrně velký skok nastává až mezi variantami small a normal (ve všech případech byl překlad proveden BEZ knihoven GUI).
# | Varianta Vimu | Špička při alokaci paměti | RSS |
---|---|---|---|
1 | tiny | 3216 kB | 1368 kB |
2 | small | 3268 kB | 1428 kB |
3 | normal | 6580 kB | 3344 kB |
4 | big | 6788 kB | 3476 kB |
5 | huge | 6796 kB | 3512 kB |
7. Přidáváme rozhraní pro různé skriptovací jazyky do Vimu
K překladu vlastní varianty Vimu se mnoho uživatelů dostane z toho důvodu, aby získali Vim s rozhraním pro jejich oblíbený skriptovací jazyk (viz předchozí dva díly tohoto seriálu). Důležité přitom je, že rozhraní pro programovací jazyky nepatří mezi vlastnosti přidávané v některé standardní variantě Vimu, tj. ani jedno z těchto rozhraní není do výsledného binárního souboru zahrnuto ani v případě použití varianty huge! Pro přidání některého z těchto rozhraní se musí použít explicitní konfigurační parametr zadávaný při spuštění skriptu ./configure. Jedná se o některý z těchto parametrů:
# | Volba pro ./configure | Význam |
---|---|---|
1 | --enable_pythoninterp | zahrnutí rozhraní pro programovací jazyk Python 2.x |
2 | --enable_python3interp | zahrnutí rozhraní pro programovací jazyk Python 3.x |
3 | --enable_tclinterp | zahrnutí rozhraní pro programovací jazyk Tcl |
4 | --enable_rubyinterp | zahrnutí rozhraní pro programovací jazyk Ruby |
5 | --enable_luainterp | zahrnutí rozhraní pro programovací jazyk Lua |
6 | --enable_mzschemeinterp | zahrnutí rozhraní pro programovací jazyk Scheme |
7 | --enable_perlinterp | zahrnutí rozhraní pro programovací jazyk Perl |
Použití výše uvedených voleb je snadné (za předpokladu, že jsou příslušné jazyky nainstalovány):
cd vim/src ./configure --with-features=normal --enable-pythoninterp make
Mohlo by se zdát, že rozhraní pro programovací jazyky zabere v binárním spustitelném souboru poměrně dost místa, ve skutečnosti se však jedná „pouze“ o desítky či stovky kilobajtů. V následující tabulce můžete vidět rozdíl mezi Vimem přeloženým pouze s volbou –with-features=normal a Vimem přeloženým s volbou –enable-pythoninterp:
# | Varianta Vimu | Velikost po překladu | Velikost po „strip“ |
---|---|---|---|
1 | normal | 4229575 | 1420128 |
2 | normal+pythoninterp | 4413785 | 1545440 |
8. Výpis vlastností Vimu obsažených v jeho různých variantách
V této kapitole jsou pro zajímavost vypsány vlastnosti Vimu zahrnuté v jeho jednotlivých variantách. Navíc je ještě přidána normální varianta Vimu přeložená s podporou rozhraní pro jazyk Python:
Tiny
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 1 2011 09:03:02) Included patches: 1-353 Compiled by pavel@bender Tiny version without GUI. Features included (+) or not (-): -arabic -autocmd -balloon_eval -browse +builtin_terms -byte_offset -cindent -clientserver -clipboard -cmdline_compl -cmdline_hist -cmdline_info -comments -conceal -cryptv -cscope -cursorbind -cursorshape -dialog -diff -digraphs -dnd -ebcdic -emacs_tags -eval -ex_extra -extra_search -farsi -file_in_path -find_in_path -float -folding -footer +fork() -gettext -hangul_input -iconv -insert_expand -jumplist -keymap -langmap -libcall -linebreak -lispindent -listcmds -localmap -lua -menu -mksession -modify_fname -mouse -mouse_dec -mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse -mouse_xterm -mouse_urxvt -multi_byte -multi_lang -mzscheme -netbeans_intg -path_extra -perl -persistent_undo -printer -profile -python -python3 -quickfix -reltime -rightleft -ruby -scrollbind -signs -smartindent -sniff -startuptime -statusline -sun_workshop -syntax -tag_binary -tag_old_static -tag_any_white -tcl +terminfo -termresponse -textobjects -title -toolbar -user_commands -vertsplit -virtualedit -visual -viminfo -vreplace +wildignore -wildmenu -windows +writebackup -X11 -xfontset -xim -xsmp -xterm_clipboard -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/local/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -D_FORTIFY_SOURCE=1 Linking: gcc -L/usr/local/lib -Wl,--as-needed -o vim -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -lncurses -lnsl
Small
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 1 2011 09:07:54) Included patches: 1-353 Compiled by pavel@bender Small version without GUI. Features included (+) or not (-): -arabic -autocmd -balloon_eval -browse +builtin_terms -byte_offset -cindent -clientserver -clipboard -cmdline_compl +cmdline_hist -cmdline_info -comments -conceal -cryptv -cscope -cursorbind -cursorshape -dialog -diff -digraphs -dnd -ebcdic -emacs_tags -eval -ex_extra -extra_search -farsi -file_in_path -find_in_path -float -folding -footer +fork() -gettext -hangul_input -iconv -insert_expand +jumplist -keymap -langmap -libcall -linebreak -lispindent -listcmds -localmap -lua -menu -mksession -modify_fname -mouse -mouse_dec -mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse -mouse_xterm -mouse_urxvt -multi_byte -multi_lang -mzscheme -netbeans_intg -path_extra -perl -persistent_undo -printer -profile -python -python3 -quickfix -reltime -rightleft -ruby -scrollbind -signs -smartindent -sniff -startuptime -statusline -sun_workshop -syntax -tag_binary -tag_old_static -tag_any_white -tcl +terminfo -termresponse -textobjects -title -toolbar -user_commands -vertsplit -virtualedit +visual -visualextra -viminfo -vreplace +wildignore -wildmenu +windows +writebackup -X11 -xfontset -xim -xsmp -xterm_clipboard -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/local/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -D_FORTIFY_SOURCE=1 Linking: gcc -L/usr/local/lib -Wl,--as-needed -o vim -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -lncurses -lnsl
Normal
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 1 2011 09:17:08) Included patches: 1-353 Compiled by pavel@bender Normal version without GUI. Features included (+) or not (-): -arabic +autocmd -balloon_eval -browse +builtin_terms +byte_offset +cindent +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments -conceal +cryptv -cscope +cursorbind +cursorshape +dialog_con +diff +digraphs -dnd -ebcdic -emacs_tags +eval +ex_extra +extra_search -farsi +file_in_path +find_in_path +float +folding -footer +fork() -gettext -hangul_input -iconv +insert_expand +jumplist -keymap -langmap +libcall +linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape -mouse_dec -mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse +mouse_xterm -mouse_urxvt -multi_byte +multi_lang -mzscheme +netbeans_intg +path_extra -perl +persistent_undo +postscript +printer -profile -python -python3 +quickfix +reltime -rightleft -ruby +scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup +X11 -xfontset -xim +xsmp_interact +xterm_clipboard -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/local/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -D_FORTIFY_SOURCE=1 Linking: gcc -L/usr/local/lib -Wl,--as-needed -o vim -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -lncurses -lnsl
Normal+Python
Povšimněte si odlišné konfigurace linkeru:
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 1 2011 10:15:58) Included patches: 1-353 Compiled by pavel@bender Normal version without GUI. Features included (+) or not (-): -arabic +autocmd -balloon_eval -browse +builtin_terms +byte_offset +cindent +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments -conceal +cryptv -cscope +cursorbind +cursorshape +dialog_con +diff +digraphs -dnd -ebcdic -emacs_tags +eval +ex_extra +extra_search -farsi +file_in_path +find_in_path +float +folding -footer +fork() -gettext -hangul_input -iconv +insert_expand +jumplist -keymap -langmap +libcall +linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape -mouse_dec -mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse +mouse_xterm -mouse_urxvt -multi_byte +multi_lang -mzscheme +netbeans_intg +path_extra -perl +persistent_undo +postscript +printer -profile +python -python3 +quickfix +reltime -rightleft -ruby +scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup +X11 -xfontset -xim +xsmp_interact +xterm_clipboard -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/local/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -D_FORTIFY_SOURCE=1 Linking: gcc -L/usr/local/lib -Wl,--as-needed -o vim -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -lncurses -lnsl -L/usr/lib/python2.6/config -lpytho n2.6 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-f unctions
Big
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 1 2011 09:26:59) Included patches: 1-353 Compiled by pavel@bender Big version without GUI. Features included (+) or not (-): +arabic +autocmd -balloon_eval -browse ++builtin_terms +byte_offset +cindent +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments +conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +digraphs -dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path +float +folding -footer +fork() -gettext -hangul_input +iconv +insert_expand +jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape +mouse_dec -mouse_gpm -mouse_jsbterm +mouse_netterm -mouse_sysmouse +mouse_xterm +mouse_urxvt +multi_byte +multi_lang -mzscheme +netbeans_intg +path_extra -perl +persistent_undo +postscript +printer -profile -python -python3 +quickfix +reltime +rightleft -ruby +scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup +X11 +xfontset -xim +xsmp_interact +xterm_clipboard -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/local/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -D_FORTIFY_SOURCE=1 Linking: gcc -L/usr/local/lib -Wl,--as-needed -o vim -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -lncurses -lnsl
Huge
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 1 2011 09:34:17) Included patches: 1-353 Compiled by pavel@bender Huge version without GUI. Features included (+) or not (-): +arabic +autocmd -balloon_eval -browse ++builtin_terms +byte_offset +cindent +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments +conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +digraphs -dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path +float +folding -footer +fork() -gettext -hangul_input +iconv +insert_expand +jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape +mouse_dec -mouse_gpm -mouse_jsbterm +mouse_netterm -mouse_sysmouse +mouse_xterm +mouse_urxvt +multi_byte +multi_lang -mzscheme +netbeans_intg +path_extra -perl +persistent_undo +postscript +printer +profile -python -python3 +quickfix +reltime +rightleft -ruby +scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup +X11 +xfontset -xim +xsmp_interact +xterm_clipboard -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/local/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -D_FORTIFY_SOURCE=1 Linking: gcc -L/usr/local/lib -Wl,--as-needed -o vim -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -lncurses -lnsl
9. Odkazy na Internetu
- Building Vim
http://vim.wikia.com/wiki/Building_Vim - Getting the Vim source with Mercurial
http://vim.wikia.com/wiki/Getting_the_Vim_source_with_Mercurial - Vim Perl Interface
http://vim.dindinx.net/vim7/html/if_perl.txt.php - Vim Perl Support
http://www.softpanorama.org/Editors/Vimorama/vim_perl_support.shtml - VIM as Python IDE
http://blog.dispatched.ch/2009/05/24/vim-as-python-ide/ - Stack Overflow: VIM: Perl interface: passing a variable to Perl and reading a vim variable from Perl
http://stackoverflow.com/questions/4999902/vim-perl-interface-passing-a-variable-to-perl-and-reading-a-vim-variable-from - Stack Overflow: Getting started with vim scripting with Perl
http://stackoverflow.com/questions/2208618/getting-started-with-vim-scripting-with-perl - Perl: home page
http://www.perl.org/ - Python: home page
http://www.python.org/ - Ruby: home page
http://www.ruby-lang.org/en/ - Tcl/Tk
http://www.dmoz.org/Computers/Programming/Languages/Tcl-Tk/ - Python with a modular IDE (Vim)
http://www.sontek.net/python-with-a-modular-ide-vim - PEP 8 – Style Guide for Python Code
http://www.python.org/dev/peps/pep-0008/ - pydoc.vim: Python documentation view- and search-tool (uses pydoc)
http://www.vim.org/scripts/script.php?script_id=910 - Getting to VIM's Python interface
http://zerokspot.com/weblog/2009/02/21/getting-to-know-vims-python-interface/ - Pretty-formatting XML
http://vim.wikia.com/wiki/Pretty-formatting_XML - Delete a pair of XML/HTML tags
http://vim.wikia.com/wiki/Delete_a_pair_of_XML/HTML_tags - Vim as XML Editor
http://www.pinkjuice.com/howto/vimxml/ - xmledit: A filetype plugin to help edit XML, HTML, and SGML documents
http://www.vim.org/scripts/script.php?script_id=301 - Poslední vývojová verze makra xmledit
http://github.com/sukima/xmledit/ - vim.wikia: Display date-and-time on status line
http://vim.wikia.com/wiki/Display_date-and-time_on_status_line - vim.wikia: Writing a valid statusline
http://vim.wikia.com/wiki/Writing_a_valid_statusline - vim.wikia: Statusline tab level ruler
http://vim.wikia.com/wiki/Statusline_tab_level_ruler - vim.wikia: Switching between different statuslines
http://vim.wikia.com/wiki/Switching_between_different_statuslines - X Selections, Cut Buffers, and Kill Rings
http://www.jwz.org/doc/x-cut-and-paste.html - Accessing the system clipboard
http://vim.wikia.com/wiki/Accessing_the_system_clipboard - xcutsel(1) – Linux man page
http://linux.die.net/man/1/xcutsel - snipMate : TextMate-style snippets for Vim
http://www.vim.org/scripts/script.php?script_id=2540 - msanders / snipmate.vim
https://github.com/msanders/snipmate.vim - snipMate.vim Introductory Screencast
http://vimeo.com/3535418 - 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