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

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

    快速安裝python

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

    完整安裝:git

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

    2.下載libclang.so,YCM做者推薦下載官方預編譯以後的libclang.so而不是用你係統自帶的libclang,若是你真的要用本身的sysytem中的libclang須要保證版本號大於等於3.3,不然會出現隨機性的錯誤。數據庫

    3.編譯ycm_support_libs庫。首先確保本身安裝了python-dev有python的頭文件,而後創建臨時文件夾ycm_buildjson

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下,而後運行vim

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的運行。ui

    使用:

    完成了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定製的人不在少數,此文就當拋磚引玉,但願個人這篇文章可以幫助到你,同時也但願志同道合的朋友能夠留下你的腳印,畢竟有大家的支持才能讓我更有寫做的動力。

相關文章
相關標籤/搜索