YouCompleteMe is a fast, as-you-type, fuzzy-search code completion engine for Vim.參考: https://github.com/Valloric/YouCompleteMe#full-installation-guide本篇文章默認(rèn)讀者知道什么是 unix/linux,vim/vi, YouCompleteMe,如果有不清楚的,
Search engine is your friend或者留言討論。YouCompleteMe 簡稱 YCM 以下都稱為 YCM。YouCompleteMe 的強(qiáng)大想必大家都聽說過,簡單的用一句話來概括的話,
媲美 VS 的自動(dòng)補(bǔ)全當(dāng)然可能有一點(diǎn)點(diǎn)過,但可見其強(qiáng)大。但是作為一個(gè)十分強(qiáng)大的 vim 插件,他可是十分的難以安裝,幾乎所有的人,都會(huì)在安裝階段苦苦掙扎(別問老夫怎么知道的),然后要么成功安裝享受工具帶來的便利,要么放棄繼續(xù)使用傳統(tǒng)的自動(dòng)補(bǔ)全工具(當(dāng)然也沒有那么差,但可能沒有 YCM 那么強(qiáng)大)。經(jīng)過老夫的辛苦探索,終于在聽到 YCM 大名的一年之后成功安裝,所以分享出來,希望能夠幫助到更多的人。另外如果在安裝過程中遇到任何問題都?xì)g迎在評論與我討論。
有了你我才是我,你的存在令我完整—— 老夫
系統(tǒng)環(huán)境:Kali-Rolling on Oracle VirtualBox,可以當(dāng)作是最新版(或者說實(shí)驗(yàn)版)的 Debian
目標(biāo):成功安裝使用 YCM, 盡量少的編譯軟件(即盡量使用預(yù)編譯 deb 包),盡量可以實(shí)現(xiàn)更多種語言的自動(dòng)補(bǔ)全
安裝步驟:
0. 確保 vim 版本是 7.4.143 或以上,并且支持 python 2/3 腳本
vim version
從上圖可以看出老夫的 vim 版本是 8.0.49 且支持 python3 腳本但不支持 python2 腳本(截圖的倒數(shù)第 7,8 行)如果你的打印結(jié)果中沒有相關(guān) python 腳本信息,還可以在 vim 中鍵入命令
:echo has('python') || has('python3'),若結(jié)果是 1 則證明是支持的。若不論是 vim 版本不滿足條件或者是不支持 python 腳本,那么就需要從源碼編譯安裝 vim 了,
1. 通過 Vundle 來安裝 YCM(官方推薦)
快速安裝 vim 的插件管理插件 vundle
在 vim 的配置文件
call vundle#begin(). . . Plugin 'Valloric/YouCompleteMe’. . .call vundle#end()~/.vimrc中添加一行(在call vundle#begin()和call vundle#end()之間)然后保存運(yùn)行 vim 命令
:PluginInstall安裝 需要特別注意的是這個(gè)時(shí)候可能等的時(shí)間會(huì)相當(dāng)?shù)拈L這個(gè)時(shí)候打開 vim 可能則會(huì)有警告如下圖
vim warning
1.5 通過 Git 安裝 YCM
如果你跟老夫一樣,等待 Vundle 安裝 YCM 等了好久終于貌似好像成功了,打開 vim 卻發(fā)現(xiàn)
# 下載 (在 `~/.vim/bundle` 目錄下)$ git clone --recursive [https://github.com/Valloric/YouCompleteMe.git](https://github.com/Valloric/YouCompleteMe.git)# 檢查完整性(在 `~/.vim/bundle/YouCompleteMe` 目錄下)$ git submodule update --init --recursiveYouCompleteme unavailable : no module named future(當(dāng)然沒有遇到算你運(yùn)氣好),那么你應(yīng)該考慮一下?lián)Q用 Git 來安裝 YCM:2. 下載安裝最新版的 libclang
如果不需要 C 家族的語義化補(bǔ)全,則可跳過這一步
# apt-get install llvm-3.9 clang-3.9 libclang-3.9-dev libboost-all-devPS: YCM 官方墻烈推薦使用上游編譯的二進(jìn)制文件代替系統(tǒng)自帶的 libclang
You can use the system libclang only if you are sure it is version 3.9 or higher, otherwise don't. Even if it is, we recommend using the official binaries from llvm.org if at all possible. Make sure you download the correct archive file for your OS.
We STRONGLY recommend AGAINST use of the system libclang instead of the upstream compiled binaries. Random things may break. Save yourself the hassle and use the upstream PRe-built libclang.
3. 編譯構(gòu)建
ycm_core庫需要:cmake python3-dev
YCM 的頂層目錄或者說根目錄應(yīng)該是
創(chuàng)建一個(gè)目錄放編譯過程中產(chǎn)生的文件$ mkdir ~/.ycm_build$ cd ~/.ycm_build生成 makefile~/.vim/bundle/YouCompleteMe如果跳過第三步的話,則可以直接運(yùn)行
$ cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp如果沒有跳過第三步,說明需要 c 家族的語義化補(bǔ)全則需運(yùn)行
$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_BOOST=ON DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp有問題的編譯
編譯通過的,沒有報(bào)錯(cuò),但是這個(gè)編譯結(jié)果是有問題的,看第 3 行,反復(fù)強(qiáng)調(diào)的 c 家族的語義補(bǔ)全沒有了。經(jīng)過老夫反復(fù)的檢查,原來是上面的編譯命令少了一個(gè)
$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_BOOST=ON -DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp-符號(hào)這個(gè)時(shí)候編譯的過程如下圖:
編譯正常
其實(shí)這個(gè)還是有問題的,看倒數(shù)第 3、4 行,使用的是外部的 libclang-3.6 ,第 2 步中說的系統(tǒng)安裝的 libclang 最低要是是 3.9。這個(gè)時(shí)候就需要?jiǎng)h除
$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_BOOST=ON -DEXTERNAL_LIBCLANG_PATH=/usr/lib/x86_64-linux-gnu/libclang-3.9.so . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp~/.ycm_build目錄下的所有文件,使用下面的命令指定 libclang 的版本重新編譯。編譯的結(jié)果是之前新建的目錄(也就是當(dāng)前目錄下生成了一些 Makefile 文件)
Makefile構(gòu)建 ycm_core# --config Release 這個(gè)構(gòu)建選項(xiàng)進(jìn)針對 Windows$ cmake --build . --target ycm_core --config Release
build ycm_core
3.5 配置
復(fù)制 .ycm_extra_conf.py 文件$ cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/添加 vim 配置注意下面的 python 解釋器的路徑要和編譯 ycm_core 的時(shí)候使用的 python 解釋器是相同的版本(2 或 3)“ ~/.vimrclet 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由于老夫?qū)@些語言沒有太多的涉獵就不做介紹了。
5. 測試安裝
首先新建一個(gè) hello.c 文件,
hello.c
可以看到自動(dòng)補(bǔ)全了頭文件,厲害了老夫的 YCM
然后在 vim 中運(yùn)行
:YcmToggleLogs stderr命令查看錯(cuò)誤日志,stderr
沒有看到報(bào)錯(cuò)信息,則證明 YCM 已成功安裝。
作者:老東D不知火-極光
原文:http://www.jianshu.com/p/d908ce81017a
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注