2013-04-17

在 Vim 中使用 clang_complete 做程式碼補完

先看一下效果,在這個例子中,我使用 standard library 中的 vector 容器,當打到 v. 的時候,Vim 會自動跳出視窗列出可以使用的 function,圖片中顯示的是再打了 p 之後的篩選結果。

之前我是使用 ctags + OmniCppComplete來做程式碼補完,他的缺點是:

  1. 要先產生 tags。
  2. ctags 其實看不懂程式碼,有些 code 會跑不出來,例如 libstdc++,所以網路上常見的作法是拿一份修改過的 header 給 ctags 跑。

總體來說,這樣搭配的補完效果跟 visual studio 是完全不能比的。

clangcomplete 這個 plug-in 跟 OmniCppComplete 不同,他是使用 LLVM compiler 的 front-end clang 去 compile 你的程式,所以可以列出最精確的補完清單,甚至你還可以給他 include path 跟 compile option,又會更準。這樣用起來,補完的資訊跟就變得跟 visual studio 一樣,都是由 compiler 提供,相信整體的品質應該會好上許多。

回到先前的例子,可以把 clangcomplete 的執行想成是先 compile 你的程式,再根據結果給你補完的清單,所以如果我前面忘了打 #include ,這個清單是會跑不出來的,會找不到。

安裝方式

  1. 安裝 clang,ubuntu 可以透過 apt-get 或是軟體商城把套件 clang,libclang-dev 裝上即可。windows 的話可以抓 source code 自己 build,或是他有提供一個基於 mingw32win32 binary
  2. 裝完後可以參考網頁上的範例,試一下,確定你的 clang 是好的。記得要把 clang / libclang.a / libclang.so / clang.dll 的位置加到 PATH 中。
  3. 安裝 Vim plug-in clang_complete,參考作者的安裝說明,或是你有使用 pathogen.vim 在管理 plug-in 的話,那麼不用我說,你一定知道要怎麼裝!
  4. 根據我的經驗,在 windows 的話,要複製一份 clang.dll 改名為 libclang.dll,這樣 clang_complete 才找得到。

使用方式

  1. 當打到 . / -> / :: 等的時候,補完視窗就會自己跳出,或是可以按 。
  2. 其他相關的使用與設定
  3. clang_complete 會跟一些補完的套件衝突,例如 OmniCppComplete,記得要先把那些停掉。

延伸 Reference

沒有留言:

張貼留言