使用vim的各位確定嘗試過各類各樣的自動補全插件,好比說大名鼎鼎的 OmniCppComplete 。這一類的插件都是對 Ctags 生成的符號表進行字符串匹配來得到可能的補全項。他們在編寫 C 代碼的時候仍是很好用的,可是到了 C++ 的環境狀況就不一樣了,各類做用域的存在使得僅僅依靠符號表匹配的方式徹底沒法發揮做用。php
好比我輸入一個 SomeType 的對象 bar,而後我想獲得成員變量 a 的提示,可是卻沒有任何事情發生:python
struct SomeType { int a; }; void foo() { SomeType bar; bar. // 咦。。。 }
有人會問:那像 Visual Studio 中的 IntelliSense 怎麼會有那麼好的補全功能呢?git
這是由於它利用了微軟的 CL 編譯器的功能對代碼進行語法分析,這樣一來補全工具就知道了各個符號所表示的究竟是函數仍是類型仍是變量,同時也知道了一個做用域裏都有那些符號,那麼在補全的時候就的心應手了。github
而後有人又要問了:若是咱們的插件也利用上編譯器的語法分析功能那就不行了嗎?web
爲了解決這一問題,咱們首先能夠想到的是利用你們所熟知的 GCC 。可是 GCC 對第三方應用的支持不好,沒有直接的編程接口,通常的應用只能本身解析 GCC 生成的中間文件來得到所需的信息,這樣的方式既費時又容易出錯。編程
那有什麼其餘的替代方式呢?vim
接下來,我要隆重地介紹新時代的編譯器 Clang,這個基於 LLVM 的編譯器有着比 GCC 更快的編譯速度和更人性化的錯誤提示,而且支持 C, C++, Objective-C 和 Objective-C++。更重要的是 Clang 提供了大量的 API 來供第三方應用調用,甚至直接就有得到自動補全提示的接口。函數
咱們今天的主角 clang_complete 就是一款基於 Clang 的插件。工具
安裝前提spa
Vim 7.3 或更高版本
Clang 3.0 或更高版本
沒有安裝 OmniCppComplete
直接下載安裝
$ vim clang_complete.vmb -c 'so %' -c 'q'
從 Github 得到並生成 (須要python)
$ git clone https://github.com/Rip-Rip/clang_complete.git $ make $ vim clang_complete.vmb -c 'so %' -c 'q'
好了話很少說,裝上插件好好地享受 coding 吧!