跟我一起學Vim補全神級插件--YouCompleteMe

   最近重拾Vim,編譯部署來補全插件YCM,這個插件的補全效果和在寫C代碼的時候的自動提示錯誤信息等還是十分棒的,寫點心得下來,也算給自己做個備忘。

    快速安裝

    首先參考我的.vimrc配置,用Vundle安裝好之後,進入YCM的文件夾.vim/bundle/YouCompleteMe會找到install.sh腳本文件。這個時候如果你需要C語言系的語義補全你需要在運行install.sh腳本之後手動加入命令--clang-completer,即可進行自動安裝,此時YCM會去Clang的官網去下載libclang.so來作爲YCM語義補全的支持。

    完整安裝:

    1.如果採用之前的方法不能進行安裝的話可以進行自己的定製化安裝,YCM是一個編譯插件,因此需要進行手動編譯。首先第一點就要確保你的Vim的最低版本必須是7.3.584,並且支持python2。如果不支持,你必須自己手動編譯一份Vim。(查看是否支持python2可以在Vim中輸入:echo has('python')如果輸出1就表示支持,0就表示這個時候你需要重新編譯了)

    2.下載libclang.so,YCM作者推薦下載官方預編譯 之後的libclang.so而不是用你係統自帶的libclang,如果你真的要用自己的sysytem中的libclang需要保證版本號大於等於3.3,否則會出現隨機性的錯誤。

    3.編譯ycm_support_libs庫。首先確保自己安裝了python-dev有python的頭文件,然後建立臨時文件夾ycm_build

cd ~
mkdir ycm_build
cd ycm_build
cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp


    用CMake完成了生成Makefile的過程,注意這個過程是給那些不需要C語義補全的同學,如果你需要C的語義補全,步驟會稍微麻煩點。你需要自己下載二進制發行版的LLVM+Clang或者自己手動編譯LLVM和Clang,然後保證bin,lib,inclulde在文件夾根目錄下比如ycm_temp/llvm_clang下,然後運行

cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
    等待Makefile生成之後運行

make ycm_support_libs
    即完成了ycm_supprot_libs的編譯,對於那些想用系統libclang的同學你需要傳入-DUSE_SYSTEM_LIBCLANG=ON來替代-DPATH_TO_LLVM_ROOT的flag.如果你係統內有自定義的libclang你也可以定義採用自定義的libclang,-DEXTERNAL_LIBCLANG_PATH=/path/to/libclang.so.同時需要注意的是,如果你採用了Clang的語義補全支持,make命令也會把libclang複製一份放到YouCompleteMe/python下面來驅動YCM的運行。


    使用:

    完成了YCM的編譯就可以享受它給你帶來的方便了,如果你需要C語言的語義補全,除了剛剛編譯多出來的步驟之外,你還需要提供編譯的flag給YCM才能進行真正的補全。YCM查找.ycm_extra_conf.py來進行補全支持,你也可以手動提供一個全局的.ycm_extra_conf.py路徑來給YCM做缺省處理(YCM查找路徑是依次從裏到外的向上,如果找不到會採取默認的全局路徑,我選擇放在主目錄下面,這樣不需要設置全局路徑,因爲YCM始終可以找到它)。

    此外說一下.ycm_extra_conf.py,對於一些簡單的小項目,使用默認的文件即可,對於默認文件我選擇關閉了-Werror因爲這樣會給Vim提示語義準確的Syntastic帶來困擾,另外我多加了一句-isystem,/usr/include/c++/4.8,因爲我發現默認的ycm_extra_conf似乎找不到C++頭文件。對於複雜項目來說,這個時候又需要借用我們強大的CMake了。CMake中有一個命令可以導出編譯flag,-DCMAKE_EXPORT_COMPILE_COMMANDS=ON,這個時候CMake會把當前的編譯flag全部導出到一個json數據庫-compilation_commands.json,之後 我們需要手動給ycm_extra_conf.py中的compilation_database_folder一行 添加你數據庫的位置,比如你在src,ycm_ectra_conf在你目錄下,而你的json在build中,所以你需要寫floder=./build,這個時候打開Vim,你會發現你的項目已經可以進行補全,我在進行Qt開發的過程中就是將CMake腳本維護好之後通過json來讓YCM找到Qt的頭文件從而進行補全,十分方便。

    總結:都說Vim最強大的樂趣在於自由定製,我感覺從Vim定製的過程中也可以學習到很多東西,也會這就是定製給我帶來的真正樂趣,迫使我去學習,迫使我去嘗試各種情況。我相信喜歡Vim定製的人不在少數,此文就當拋磚引玉,希望我的這篇文章能夠幫助到你,同時也希望志同道合的朋友可以留下你的腳印,畢竟有你們的支持才能讓我更有寫作的動力。

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章