YouCompleteMe實現vim自動補全


1.准備條件
(1)最新版的Vim(7.3.584+),須支持Python
終端輸入命令:vim –version 或 打開vim用命令:version 查看版本信息,若python前有‘+’即可。
然后終端執行命令:

sudo apt-get install python-dev

裝的過程中若遇到問題,依次執行以下命令:

sudo apt-get update
sudo apt-get install -f

之后重試安裝:

sudo apt-get install python-dev

(2)安裝cmake
ubuntu下命令:sudo apt-get install cmake
(3)安裝clang
ubuntu下命令:sudo apt-get install clang
或者跳過這步,后面編譯YCM時,如果沒有clang會自動安裝。
(4)安裝Vundle
這個是用來管理vim插件的,安裝和卸載都特別方便,各個插件是一個文件夾,放在目錄bunble下。
2.安裝vundle
(1)$:git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

(‘$’均表示命令提示符)
(2)在 .vimrc 的文件起始處,插入以下內容並保存:

set nocompatible " be iMproved set rtp+=~/.vim/bundle/vundle/ call vundle#rc() " let Vundle manage Vundle " required! Bundle 'scrooloose/syntastic' Bundle 'gmarik/vundle' " My bundles here: " " original repos on GitHub Bundle 'tpope/vim-fugitive' Bundle 'Lokaltog/vim-easymotion' Bundle 'rstacruz/sparkup', {'rtp': 'vim/'} Bundle 'tpope/vim-rails.git' " vim-scripts repos Bundle 'L9' Bundle 'FuzzyFinder' " non-GitHub repos Bundle 'git://git.wincent.com/command-t.git' " Git repos on your local machine (i.e. when working on your own plugin) Bundle 'file:///Users/gmarik/path/to/plugin' " ... Bundle 'Valloric/YouCompleteMe' filetype plugin indent on " required!

注:Bundle ‘插件名或Git鏈接’ 表示要安裝的插件
(3)再次打開vim,在命令行模式中執行:BundleInstall

(YouCompleteMe的github地址 https://github.com/ycm-core/YouCompleteMe)

進入安裝插件過程:

Plugin前面有‘>’表示該插件正在安裝,YoucompleteMe插件安裝的時間比較長,耐心等待,不要退出,最后會提示有一個錯誤,這是正常的,因為ycm需要手工編譯出庫文件,就像上圖中的‘!’,忽略它。
注:若要卸載插件,只需將.vimrc中 “Bundle ‘插件’ ”這條語句刪掉,然后在vim 命令行模式中執行:BundleClean即可。
3.編譯YouCompleteMe
(1)

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

參數–clang-completer是為了支持C/C++的補全,不需要可以不加。
編譯過程比較長,耐心等待。

如果出現:WARNING: this script is deprecated. Use the install.py script instead.
File /home/awakenedy/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py does not exist; you probably forgot to run:
    git submodule update --init --recursive
原因就是你或者沒用Vundle安裝,或者Vundle由於網速太慢下載到一半不能把安裝依賴包完全下載下來

       解決方案:

       進入到YouCompleteMe目錄,在terminal窗口敲入git submodule update --init --recursive

(2)找到配置文件 .ycm_extra_conf.py
網上大多說這個文件在YouCompleteMe/cpp/ycm下面,但是YouCompleteMe下面就沒有cpp文件夾,之前在third_party/ycmd/cpp/ycm目錄下,不知道什么因為現在放在了third_party/ycmd/examples目錄下了

$ cd ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py

ls -a 即可看到。
(3)自行在YoucompleteMe/中創建cpp/ycm目錄,將 .ycm_extra_conf.py拷貝進去

$ cd ~/.vim/bundle/YouCompleteMe
$ mkdir cpp
$ mkdir cpp/ycm
$ cp third_party/ycmd/examples/.ycm_extra_conf.py cpp/ycm/

4.修改.vimrc配置文件
將下面的內容添加到.vimrc里面

" 尋找全局配置文件 let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py' " 禁用syntastic來對python檢查 let g:syntastic_ignore_files=[".*\.py$"] " 使用ctags生成的tags文件 let g:ycm_collect_identifiers_from_tag_files = 1 " 開啟語義補全 " 修改對C語言的補全快捷鍵,默認是CTRL+space,修改為ALT+;未測出效果 "let g:ycm_key_invoke_completion = '<M-;>' " 設置轉到定義處的快捷鍵為ALT+G,未測出效果 "nmap <M-g> :YcmCompleter GoToDefinitionElseDeclaration <C-R>=expand("<cword>")<CR><CR> "關鍵字補全 "let g:ycm_seed_identifiers_with_syntax = 1 " 在接受補全后不分裂出一個窗口顯示接受的項 set completeopt-=preview " 讓補全行為與一般的IDE一致 set completeopt=longest,menu " 不顯示開啟vim時檢查ycm_extra_conf文件的信息 let g:ycm_confirm_extra_conf=0 " 每次重新生成匹配項,禁止緩存匹配項 let g:ycm_cache_omnifunc=0 " 在注釋中也可以補全 let g:ycm_complete_in_comments=1 " 輸入第一個字符就開始補全 let g:ycm_min_num_of_chars_for_completion=1 " 錯誤標識符 let g:ycm_error_symbol='>>' " 警告標識符 let g:ycm_warning_symbol='>*' " 不查詢ultisnips提供的代碼模板補全,如果需要,設置成1即可 " let g:ycm_use_ultisnips_completer=0

上面的內容中,除了第一句尋找全局配置文件,其他的語句可以根據自己的需要更改、刪除或添加。
注:如果沒有在第(3)步中自己創建cpp/ycm目錄拷貝.ycm_extra_conf.py文件,則需要將第一句中的路徑改為全局配置文件所在的具體路徑,如下:

let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'

這里寫圖片描述

5.保存退出.vimrc ,打開一個C/C++源程序,體驗其自動補全效果。  
還可以對C++的STL庫智能補全:

6.
(1)配合上面安裝的syntastic還可以語法檢測
 
‘>>’指出有語法錯誤,但是檢測速度太慢,沒什么大用。

自我感覺這個語法自動檢測很煩,可以禁用它:
進入 /bundle/YouCompleteMe/plugin
修改youcompleteme.vim中的:
第141行的參數改為0就可以了。

7.添加頭文件
目前在include中,無法補全stdio.h等頭文件,我們需要將/usr/include添加進去。路徑添加到 ~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py 文件中的flags 數組中,每增加一個路徑,前面要寫’-isystem’。

以后需要boost庫等其他的補全,也需要將相應的路徑添加進去。

-.YoucompleteMe還有很多強大的功能,有興趣可以繼續探索。

自動縮進

自動縮進有用,但是在某些情況下(比如函數定義有多行的時候),並不總是會達到你想要的效果,尤其是在符合PEP8標准方面。我們可以利用indentpython.vim插件,來解決這個問題:

Plugin 'vim-scripts/indentpython.vim' 
(git clone https://github.com/ycm-core/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM