Ha a VIM és a clang találkozik, vagyis clang_complete

A mai nap freebsd levlista olvasgatás közben akadt meg a szemem ezen a levélen,
melyben az illető felvetette a kerdést, hogy az alaprendszer miert nem rakja
fel a libclang.so-t. A kérdéskör onnan indult, hogy adott a VIM-hez egy plugin,
mely clang_complete névre hallgat és ezt a file-t használná.

Ezen a levélen felbuzdulva megnéztem, hogy mégis mi ez a clang_complete és mire
jó.

A telepítését röviden összefoglaltam:

op@pandora-d ~> cd /tmp

op@pandora-d /tmp> fetch -o clang_complete-1.8.vmb 'http://www.vim.org/scripts/download_script.php?src_id=17048'
clang_complete-1.8.vmb                        100% of   92 kB  661 kBps

op@pandora-d /tmp> vim clang_complete-1.8.vmb -c 'so %' -c 'q'
"clang_complete-1.8.vmb" 2880L, 94632C
Vimball Archive
extracted <autoload/snippets/clang_complete.vim>: 96 lines
wrote /usr/home/op/.vim/autoload/snippets/clang_complete.vim
extracted <autoload/snippets/dummy.vim>: 24 lines
wrote /usr/home/op/.vim/autoload/snippets/dummy.vim
extracted <autoload/snippets/snipmate.vim>: 50 lines
wrote /usr/home/op/.vim/autoload/snippets/snipmate.vim
extracted <autoload/snippets/ultisnips.vim>: 37 lines
wrote /usr/home/op/.vim/autoload/snippets/ultisnips.vim
extracted <bin/cc_args.py>: 84 lines
wrote /usr/home/op/.vim/bin/cc_args.py
extracted <doc/clang_complete.txt>: 257 lines
wrote /usr/home/op/.vim/doc/clang_complete.txt
extracted <plugin/clang/__init__.py>: 24 lines
wrote /usr/home/op/.vim/plugin/clang/__init__.py
extracted <plugin/clang/cindex.py>: 1236 lines
wrote /usr/home/op/.vim/plugin/clang/cindex.py
extracted <plugin/clang_complete.vim>: 668 lines
wrote /usr/home/op/.vim/plugin/clang_complete.vim
extracted <plugin/libclang.py>: 381 lines
wrote /usr/home/op/.vim/plugin/libclang.py
did helptags

Győződjünk meg róla, hogy a libclang fent van a rendszeren:

op@pandora-d ~> find /usr/local/lib -name "libclang.so"
/usr/local/lib/libclang.so

És ez történik, ha a VIM-ünket python support nélkül fordítottuk és a libclang-ot
szeretnénk használni maga a clang bináris helyett.

"subr_rtc.c" [readonly] 166L, 4879C
Error detected while processing function <SNR>9_ClangCompleteInit:
line  128:
clang_complete: No python support available.
line  129:
Cannot use clang library, using executable
line  130:
Compile vim with python support to use libclang
Press ENTER or type command to continue

ehhez viszont újrafordítás szükséges, és be kell állítanunk pár dolgot:

op@pandora-d ~> echo "WITH_VIM_OPTIONS=true" >> /etc/make.conf
op@pandora-d vim> cd /usr/ports/editors/vim
op@pandora-d vim> make clean
op@pandora-d vim> make config

itt a PYTHON supportot kapcsoljuk be

op@pandora-d vim> make reinstall

[…]

op@pandora-d ~> cd

op@pandora-d ~> cd /usr/src/sbin/devd/
op@pandora-d devd> vi devd.cc

És akkor lássuk az eredményt:

vim_clang_complete

Miért jobb ez, mint a ctag-es megoldás?
Sokkal gyorsabb, szebb, jobb és ha már egyszer a FreeBSD a jövőben clang-gal jön
alapból, akkor miért ne használnánki ezt a lehetőséget?!
Kiknek lehet hasznos?
Akik sokat kódolnak VIM-ben C, C++ vagy ObjC nyelven.