日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Vim自动补全神器:YouCompleteMe

發布時間:2024/7/23 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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() 之間)

call vundle#begin() . . . Plugin 'Valloric/YouCompleteMe’ . . . call vundle#end()

然后保存運行 vim 命令 :PluginInstall 安裝 需要特別注意的是這個時候可能等的時間會相當的長

使用Vundle安裝 youcompleteme后,需要先編譯才能使用。(可以去 github 上看 官方的 編譯安裝流程)

cd ~/.vim/bundle/YouCompleteMe ./install.sh --clang-completer

上面是編譯只有 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文件中加入

let g:ycm_global_ycm_extra_conf = 'your path to .ycm_extra_conf.py'

如果.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:

# 下載 (在 `~/.vim/bundle` 目錄下) $ git clone --recursive [https://github.com/Valloric/YouCompleteMe.git](https://github.com/Valloric/YouCompleteMe.git) # 檢查完整性(在 `~/.vim/bundle/YouCompleteMe` 目錄下) $ git submodule update --init --recursive



下載安裝最新版的 libclang


如果不需要 C 家族的語義化補全,則可跳過這一步

# apt-get install llvm-3.9 clang-3.9 libclang-3.9-dev libboost-all-dev

PS: YCM 官方墻烈推薦使用上游編譯的二進制文件代替系統自帶的 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.


編譯構建 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 家族的語義補全沒有了。經過老夫反復的檢查,原來是上面的編譯命令少了一個 - 符號

$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_BOOST=ON -DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

這個時候編譯的過程如下圖:


編譯正常

其實這個還是有問題的,看倒數第 3、4 行,使用的是外部的 libclang-3.6 ,第 2 步中說的系統安裝的 libclang 最低要是是 3.9。
這個時候就需要刪除 ~/.ycm_build 目錄下的所有文件,使用下面的命令指定 libclang 的版本重新編譯。

$ 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

編譯的結果是之前新建的目錄(也就是當前目錄下生成了一些 Makefile 文件)



構建 ycm_core

# --config Release 這個構建選項進針對 Windows $ cmake --build . --target ycm_core --config Release



配置

復制 .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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。