[vim]clang帶來的clang complete代碼補全外掛程式

來源:互聯網
上載者:User

  用vim寫C++代碼,基本上沒多少補全外掛程式可以選.我用的是omnicppcomplete,這個外掛程式靠tags來實現補全,效果差強人意.

  前一段時間發現了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包是不是已經安裝.

./configure --enable-pythoninterp --enable-gui=no --enable-cscope --enable-multibyte --enable-fontset --with-features=hugemake -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都是Just-In-Time 編譯的,所以效率可能會有問題,尤其是當代碼非常多的時候.在這裡,作者給了一種解決辦法,就是先行編譯.辦法也很簡單,建立一個標頭檔,然後include你的那些檔案,然後調用clang先行編譯一下:

clang -x c++-header ./pchheader.h -fno-exceptions -fnu-runtime -o ./pchheader.pch

  上面就是README裡面的樣本,先行編譯這個pchheader.h,然後

echo '-include-pch pchheader.pch -fgnu-runtime' >> .clang_complete 

  就可以了.

     4. user option

  上面說的先行編譯,和libclang是不能共存的,所以不推薦使用.使用libclang編譯,需要在.vimrc裡面配置:

let g:clang_complete_copen=1let g:clang_periodic_quickfix=1let g:clang_snippets=1let g:clang_close_preview=1let g:clang_use_library=1let 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應該是最多的

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.