跟我一起學Vim補全神級外掛程式--YouCompleteMe

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   strong   

    最近重拾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_buildcd ycm_buildcmake -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定製的人不在少數,此文就當拋磚引玉,希望我的這篇文章能夠協助到你,同時也希望志同道合的朋友可以留下你的腳印,畢竟有你們的支援才能讓我更有寫作的動力。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.