Vim自动补全神器:YouCompleteMe
From:http://www.jianshu.com/p/d908ce81017a
github 地址:https://github.com/Valloric/YouCompleteMe
YouCompleteMe is a fast, as-you-type, fuzzy-search code completion engine for Vim.
參考:?https://github.com/Valloric/YouCompleteMe#full-installation-guide
本篇文章默認讀者知道什么是 unix/linux,vim/vi, YouCompleteMe,如果有不清楚的,Search engine is your friend 。YouCompleteMe 簡稱 YCM 以下都稱為 YCM。
YouCompleteMe 的強大想必大家都聽說過,簡單的用一句話來概括的話,媲美 VS 的自動補全 當然可能有一點點過,但可見其強大。但是作為一個十分強大的 vim 插件,他可是十分的難以安裝,幾乎所有的人,都會在安裝階段苦苦掙扎,然后要么成功安裝享受工具帶來的便利,要么放棄繼續使用傳統的自動補全工具(當然也沒有那么差,但可能沒有 YCM 那么強大)。
1. 通過 Vundle 來安裝 YCM(官方推薦)
快速安裝 vim 的插件管理插件 vundle
http://blog.csdn.net/freeking101/article/details/78539750
在 vim 的配置文件 ~/.vimrc 中添加一行(在call vundle#begin() 和 call vundle#end() 之間)
然后保存運行 vim 命令 :PluginInstall 安裝 需要特別注意的是這個時候可能等的時間會相當的長
使用Vundle安裝 youcompleteme后,需要先編譯才能使用。(可以去 github 上看 官方的 編譯安裝流程)
上面是編譯只有 C語言 的自動補全,如果想要所有的自動補全,可以使用 --all 參數
cd ~/.vim/bundle/YouCompleteMe ./install.sh --all //或者 ./install.py --all如果編譯失敗,一般都是一些依賴或者庫不滿足。可以網上查找“YouCompleteMe編譯安裝”解決。編譯成功后,恭喜,大功搞成!!!
使用:
??? 完成了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的頭文件從而進行補全,十分方便。
語意補全要正確工作,需要配置好.ycm_extra_conf.py文件,模板在這里。可以把這個文件放在項目的根目錄下,打開項目文件時,YCM會循環向上搜索并加載這個文件,或者在vimrc文件中加入
如果.ycm_extra_conf.py中include path等配置沒有問題,YCM已經可以工作了。YCM更新很頻繁,最近版本已經可以和UltiSnip整合了。
集成Syntastic
YCM很早就支持集成Syntastic了,上面demo里面,代碼前的出現紅色叉叉,就是YCM結合Syntastic爆出的語法錯誤。剛開始用YCM的時候,更看重其代碼補全功能,Syntastic沒放在心上,結果發現越用越離不開了。當編寫C++代碼的時候,每次光標懸停2秒鐘以上的時候,YCM都會在后臺掃描你當前的文件,你剛剛輸入的代碼有什么編譯錯誤,馬上就能顯示出來,及時的改掉,不再積累到最后編譯的時候。當然這是現代IDE的標配功能,vim中也有插件可以實現,但是有了YCM后,再用vundle安裝Syntastic,甚至不用任何配置就實現了這些功能,實在是太方便了。
代碼跳轉
YCM支持代碼跳轉了,又一項對程序開發極有用的功能,現在支持c, cpp, object-c, object-cpp, python代碼跳轉到聲明和實現。特別對c和c++, 這個跳轉可不是像基于ctags的那些插件,經常讓你在一大堆重名的tag里人肉搜索,十跳九不中。得利于clang的強大功能,YCM的代碼跳轉幾乎沒有失手,當然前提是你要設置好.ycm_extra_conf.py,代碼被YCM解析時沒太多編譯錯誤。
主要功能是3個YcmCompleter的subcommands:
- GoToDeclaration
- GoToDefinition
- GoToDefinitionElseDeclaration
在vim配置文件中加上一行就搞定了
nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR>
2. 通過 Git 安裝 YCM
等待 Vundle 安裝 YCM 等了好久終于貌似好像成功了,打開 vim 卻發現 YouCompleteme unavailable : no module named future (當然沒有遇到算你運氣好),那么你應該考慮一下換用 Git 來安裝 YCM:
下載安裝最新版的 libclang
如果不需要 C 家族的語義化補全,則可跳過這一步
# apt-get install llvm-3.9 clang-3.9 libclang-3.9-dev libboost-all-dev
PS: YCM 官方墻烈推薦使用上游編譯的二進制文件代替系統自帶的 libclang
編譯構建 ycm_core 庫
需要:cmake python3-dev
YCM 的頂層目錄或者說根目錄應該是 ~/.vim/bundle/YouCompleteMe
創建一個目錄放編譯過程中產生的文件
$ mkdir ~/.ycm_build
$ cd ~/.ycm_build
生成 makefile
如果跳過第三步的話,則可以直接運行
$ cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
如果沒有跳過第三步,說明需要 c 家族的語義化補全則需運行
$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_BOOST=ON DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
有問題的編譯
編譯通過的,沒有報錯,但是這個編譯結果是有問題的,看第 3 行,反復強調的 c 家族的語義補全沒有了。經過老夫反復的檢查,原來是上面的編譯命令少了一個 - 符號
這個時候編譯的過程如下圖:
編譯正常
其實這個還是有問題的,看倒數第 3、4 行,使用的是外部的 libclang-3.6 ,第 2 步中說的系統安裝的 libclang 最低要是是 3.9。
這個時候就需要刪除 ~/.ycm_build 目錄下的所有文件,使用下面的命令指定 libclang 的版本重新編譯。
編譯的結果是之前新建的目錄(也就是當前目錄下生成了一些 Makefile 文件)
構建 ycm_core
配置
復制 .ycm_extra_conf.py 文件
$ cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/
添加 vim 配置
注意下面的 python 解釋器的路徑要和編譯 ycm_core 的時候使用的 python 解釋器是相同的版本(2 或 3)
“ ~/.vimrc
let g:ycm_server_python_interpreter='/usr/bin/python'
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
4. 其他語言的支持
C#、Go、TypeScript、 JavaScript、 Rust support
由于老夫對這些語言沒有太多的涉獵就不做介紹了。
5. 測試安裝
首先新建一個 hello.c 文件,
總結
以上是生活随笔為你收集整理的Vim自动补全神器:YouCompleteMe的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python Twisted 介绍
- 下一篇: scrapy 伪装代理和 fake_us