Textový editor Vim jako IDE (18. část – konfigurace a překlad Vimu)

3. 11. 2011
Doba čtení: 19 minut

Sdílet

V osmnácté části seriálu o různých způsobech využití textového editoru Vim si řekneme, jakým způsobem je možné Vim nakonfigurovat a přeložit ze zdrojových kódů. Tato činnost může být užitečná buď při přidávání potřebných vlastností do Vimu, nebo naopak při zmenšování nároků Vimu na spotřebu operační paměti.

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

6. Spotřeba operační paměti

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

9. Odkazy na Internetu

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/pro­jects/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ý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/sou­rce/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ů:

  1. Použitím některé volby či voleb při spuštění ./configure (asi nejpoužívanější možnost)
  2. Nastavením parametrů prostředí, které ovlivní překladač a/nebo linker
  3. Editací souboru src/feature.h (zde je možné individuálně zapnout a vypnout jednotlivé vlastnosti Vimu, soubor je bohatě komentován)
  4. 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, bighuge, 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 tinysmall (kde již jsou obsaženy všechny nejdůležitější vlastnosti) je minimální. Poměrně velký skok nastává až mezi variantami smallnormal (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=normalVimem přeloženým s volbou –enable-pythoninterp:

bitcoin_skoleni

# 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

  1. Building Vim
    http://vim.wikia.com/wiki/Bu­ilding_Vim
  2. Getting the Vim source with Mercurial
    http://vim.wikia.com/wiki/Get­ting_the_Vim_source_with_Mer­curial
  3. Vim Perl Interface
    http://vim.dindinx.net/vim7/html/if_per­l.txt.php
  4. Vim Perl Support
    http://www.softpanorama.or­g/Editors/Vimorama/vim_per­l_support.shtml
  5. VIM as Python IDE
    http://blog.dispatched.ch/2009/05/24/vim-as-python-ide/
  6. Stack Overflow: VIM: Perl interface: passing a variable to Perl and reading a vim variable from Perl
    http://stackoverflow.com/qu­estions/4999902/vim-perl-interface-passing-a-variable-to-perl-and-reading-a-vim-variable-from
  7. Stack Overflow: Getting started with vim scripting with Perl
    http://stackoverflow.com/qu­estions/2208618/getting-started-with-vim-scripting-with-perl
  8. Perl: home page
    http://www.perl.org/
  9. Python: home page
    http://www.python.org/
  10. Ruby: home page
    http://www.ruby-lang.org/en/
  11. Tcl/Tk
    http://www.dmoz.org/Compu­ters/Programming/Languages/Tcl-Tk/
  12. Python with a modular IDE (Vim)
    http://www.sontek.net/python-with-a-modular-ide-vim
  13. PEP 8 – Style Guide for Python Code
    http://www.python.org/dev/peps/pep-0008/
  14. pydoc.vim: Python documentation view- and search-tool (uses pydoc)
    http://www.vim.org/scripts/scrip­t.php?script_id=910
  15. Getting to VIM's Python interface
    http://zerokspot.com/weblog/2009/02/21/get­ting-to-know-vims-python-interface/
  16. Pretty-formatting XML
    http://vim.wikia.com/wiki/Pretty-formatting_XML
  17. Delete a pair of XML/HTML tags
    http://vim.wikia.com/wiki/De­lete_a_pair_of_XML/HTML_tags
  18. Vim as XML Editor
    http://www.pinkjuice.com/how­to/vimxml/
  19. xmledit: A filetype plugin to help edit XML, HTML, and SGML documents
    http://www.vim.org/scripts/scrip­t.php?script_id=301
  20. Poslední vývojová verze makra xmledit
    http://github.com/sukima/xmledit/
  21. vim.wikia: Display date-and-time on status line
    http://vim.wikia.com/wiki/Display_date-and-time_on_status_line
  22. vim.wikia: Writing a valid statusline
    http://vim.wikia.com/wiki/Wri­ting_a_valid_statusline
  23. vim.wikia: Statusline tab level ruler
    http://vim.wikia.com/wiki/Sta­tusline_tab_level_ruler
  24. vim.wikia: Switching between different statuslines
    http://vim.wikia.com/wiki/Swit­ching_between_different_sta­tuslines
  25. X Selections, Cut Buffers, and Kill Rings
    http://www.jwz.org/doc/x-cut-and-paste.html
  26. Accessing the system clipboard
    http://vim.wikia.com/wiki/Ac­cessing_the_system_clipbo­ard
  27. xcutsel(1) – Linux man page
    http://linux.die.net/man/1/xcutsel
  28. snipMate : TextMate-style snippets for Vim
    http://www.vim.org/scripts/scrip­t.php?script_id=2540
  29. msanders / snipmate.vim
    https://github.com/msander­s/snipmate.vim
  30. snipMate.vim Introductory Screencast
    http://vimeo.com/3535418
  31. Clewn home page
    http://clewn.sourceforge.net/
  32. How to connect vim with gdb – using clewn
    http://chunhao.net/blog/how-to-connect-vim-with-gdb-using-clewn
  33. yavdb : Yet Another (Generic) Vim Debugger Integration
    http://www.vim.org/scripts/scrip­t.php?script_id=1954
  34. Vim home page
    http://www.vim.org/
  35. Exuberant ctags
    http://ctags.sourceforge.net/
  36. xxd (man page)
    http://www.linux-tutorial.info/modules.php?na­me=ManPage&sec=1&manpage=xxd
  37. vim (man page)
    http://www.linux-tutorial.info/modules.php?na­me=ManPage&sec=1&manpage=vim
  38. ctags (man page)
    http://www.linux-tutorial.info/modules.php?na­me=ManPage&sec=1&manpage=ctags
  39. cscope (man page)
    http://www.linux-tutorial.info/modules.php?na­me=ManPage&sec=1&manpage=csco­pe
  40. 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/
  41. c.vim : C/C++ IDE
    http://vim.sourceforge.net/scrip­ts/script.php?script_id=213
  42. c.vim : C/C++ IDE key mappings
    http://lug.fh-swf.de/vim/vim-c/c-hotkeys.pdf
  43. Základní základy editoru Vim
    http://www.root.cz/clanky/zakladni-zaklady-editoru-vim/
  44. Jak si přizpůsobit Vim
    http://www.root.cz/serialy/jak-si-prizpusobit-vim/
  45. Novinky ve VIM 7: Úvodní část – speller
    http://www.root.cz/vim-sedm-prvni-cast/
  46. Novinky ve VIM 7: Skriptovací jazyk
    http://www.root.cz/vim-sedm-druha-cast/
  47. vim2elvis: Přednosti a nedostaky Elvise v porovnání s Vimem
    http://www.root.cz/clanky/vim2elvis-1/
  48. vim2elvis: Shodné znaky mezi Elvisem a Vimem, nastaveníeditoru
    http://www.root.cz/clanky/vim2elvis-2/
  49. Nej… VIM pluginy (1)
    http://www.root.cz/clanky/nej-vim-pluginy/
  50. Taglist (plugin)
    http://www.vim.org/scripts/scrip­t.php?script_id=273
  51. The NERD tree: A tree explorer plugin for navigating the filesystem
    http://www.vim.org/scripts/scrip­t.php?script_id=1658
  52. 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
  53. snippetsEmu : An attempt to emulate TextMate's snippet expansion
    http://www.vim.org/scripts/scrip­t.php?script_id=1318
  54. Scroll Lock (Necyklopedie)
    http://necyklopedie.wikia­.com/wiki/Scroll_lock
  55. Caps Lock (Necyklopedie)
    http://necyklopedie.wikia­.com/wiki/Caps_Lock
  56. Avoid the escape key
    http://vim.wikia.com/wiki/A­void_the_escape_key
  57. Map caps lock to escape in XWindows
    http://vim.wikia.com/wiki/VimTip166

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.