前一段時間發現了clang complete,發現效果很好(廣告一下:D).所以推薦一下.clang complete是llvm/clang帶來的額外功能.clang complete是靠編譯C++文件,應該是獲得抽象語法樹,進而進行補全的.所以,補全效果非常好,非常準確.但是,也有可能會比較慢.
OK,有興趣的多去Google一下llvm/clang,關注一下llvm/clang這些個項目.順便關注一下clang_complete,這些項目更新的都很快.
clang complete有兩種補全,一種是用clang(exec)編譯代碼進行補全,另外一種是用libclang,後一種依賴python.我們來看看後一種.
1. 先編譯vim,讓其支持python寫的插件.
我的Debian 6裏面,最開始沒裝python2.6-dev,然後編譯出來的vim死活都不支持py......所以,先要看看是不是裝了python2.6-dev.最新的vim 7.3支持python3的,所以想要支持python3也要看看python3的dev包是不是已經安裝.
1
2
|
./configure --enable-pythoninterp --enable-gui=no --enable-cscope --enable-multibyte --enable-fontset --with-features=huge make -j2 |
然後在root權限下make install,打開vim,輸入:py,看看出錯信息,判斷是不是已經支持python了.不支持的話,就只能用clang編譯代碼.
2. 安裝clang complete插件.(巨easy)
到https://github.com/Rip-Rip/clang_complete上面去下載最新的插件,這個插件更新很快,我第一次用的時候,還沒有libclang支持~~,然後按照README,把他拷貝到~/.vim/plugin 下面就行了.
這個時候,打開一個cpp文件,看看能不能通過:: , . , ->來獲得智能提示. 順便提一句,clang complete不能和omnicppcomplete和平共處,必須得刪掉omnicppcomplete纔可以工作....一般情況下,只要你拷貝對了位置,vimrc裏面打開了所有插件,那麼就可以獲得智能提示.
3. 預編譯一些頭文件
clang/libclang都是實時編譯的,所以效率可能會有問題,尤其是當代碼非常多的時候.在這裏,作者給了一種解決辦法,就是預編譯.辦法也很簡單,創建一個頭文件,然後include你的那些文件,然後調用clang預編譯一下:
1
|
clang -x c++-header ./pchheader.h -fno-exceptions -fnu-runtime -o ./pchheader.pch |
上面就是README裏面的示例,預編譯這個pchheader.h,然後
1
|
echo '-include-pch pchheader.pch -fgnu-runtime'
>> .clang_complete |
就可以了.
4. user option
上面說的預編譯,和libclang是不能共存的,所以不推薦使用.使用libclang編譯,需要在.vimrc裏面配置:
let g:clang_complete_copen=1 let g:clang_periodic_quickfix=1 let g:clang_snippets=1 let g:clang_close_preview=1 let g:clang_use_library=1 let g:clang_user_options='-stdlib=libc++ -std=c++11 -IIncludePath'
這是我的配置,可以參考一下. clang_user_options這邊我開啓了c++11,並且使用libc++而不是libstdc++.
另外,這個.clang_complete還可以用來包含你這個項目需要的額外頭文件路徑,如果代碼裏面用到的某些頭文件沒找到,他回到這裏面去找.不過還好,我的Debian裏面沒有這種問題.
後面附上一張clang complete補全的圖片:
PS:
在我的Debian上,加了預編譯的stl,提示超級快~~. 現在都是用libclang來補全的,速度不錯
另外,如果想要用clang complete,你的代碼必須要能被編譯過去,否則沒辦法提示的....我們代碼就很悲劇,用來很多gcc擴展,而且寫得不標準......
clang 2.8可以比較好的支持C++03,C++0x支持不是很好,估計2.9會改善
clang 3.1 目前支持的c++11應該是最多的
原文:http://www.cnblogs.com/egmkang/archive/2011/02/20/clang_complete.html