vim代碼補全-spf13,YouCompleteMe


vim代碼補全

現在的圖形界面的IDE(Integrated Development Environment)一般具有語法高亮,語法檢查,自動補全功能,大大提高了編程的效率。

vim作為文本編輯器其強大的編輯能力很大部分來自於普通模式命令,用戶使用這些命令可以快速的在文檔中移動、定位、查找、替換刪除、而不用使用鼠標去完成這些操作。vim另一個強大之處是支持各種插件安裝,用戶可以根據功能需求和習慣安裝需要的插件。本文將介紹兩個非常強大的開源vim插件使得vim具有IDE一樣的功能,提高使用vim編程的效率。這兩個vim插件分別是spf13YouCompleteMe

1. vim7.4添加Lua支持

之所以安裝支持Lua的vim7.4,是因為spf13需要Lua支持。

1.1 安裝Lua和LuaJit

Centos的官方源中包含Lua,可以直接使用Yum命令安裝

sudo yum install lua lua-devel -y

Luajit不在Centos的官方源中,需要源碼安裝

wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar -xzvf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
// 使用默認安裝路徑
make
sudo make install

1.2編譯安裝vim7.4

// git好處是以后可以方便地更新
git clone git@github.com:vim/vim.git
tar xzvf vim-7.4.tar.bz2
cd vim74
./configure --prefix=/usr/local/bin/vim74 \
--with-features=huge \
--with-luajit \
--enable-pythoninterp=yes \
--with-python-config-dir=/usr/lib64/python2.7/config \
--enable-luainterp=yes \
--enable-fail-if-missing
--enable-fail-if-missing
make
sudo make install

2. 安裝spf13

自己配置vim往往很繁瑣,需要對vim配置很熟悉,spf13-vim不僅配置精良而且包含一整套精心挑選的插件,省去了很多配置細節。

curl https://j.mp/spf13-vim3 -L > spf13-vim.sh && sh spf13-vim.sh

3. 安裝和配置YouCompleteMe

3.1 安裝YouCompleteMe

YouCompleteMe是一個vim插件,而在spf13中指定安裝YouCompleteMe插件也很方便,只需要在文件~/.vimrc.before.local中添加下面一行,然后使用Vundle安裝命令即可。

let g:spf13_bundle_groups=['general', 'youcompleteme']

Vundle命令安裝:

vim
:BundleInstall!

編譯ycm_core.so:
ycm自動補全需要動態庫ycm_core.so,需要用戶自己編譯,用戶可以選擇編譯全部功能或者選擇只支持C/C++自動補全:

cd ~/.vim/bundle/YouCompleteMe/
./install.py --all #編譯支持所有功能
or
./install.py --clang-completer #只支持C/C++補全

3.2 YouCompleteMe配置

YouCompleteMe有兩個需要配置的地方一個是.virmc,另一個是.ycm_extra_conf.py。

.vimrc位於用戶home目錄下,用來配置YouCompleteMe的全局行為,例如全局ycm_extra_conf.py路徑,代碼跳轉快捷鍵映射。我的.vimrc配置如下:

" YouCompleteMe {
        if count(g:spf13_bundle_groups, 'youcompleteme')
            let g:acp_enableAtStartup = 0
            " global conf which is needed to resolve name in system include
            " file or other  third-part include file
            let g:ycm_global_ycm_extra_conf = '~/.vim/data/ycm/.ycm_extra_conf.py'

            " enable completion from tags
            let g:ycm_collect_identifiers_from_tags_files = 1
            let g:ycm_seed_identifiers_with_syntax = 1
            let g:ycm_confirm_extra_conf = 0
            let g:ycm_cache_omnifunc=0
            let g:ycm_key_invoke_completion = '<C-;>'


            nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>
            nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR>

上面配置中全局.ycm_extra_conf.py路徑很重要,如果不配置將無法解析C/C++頭文件

.ycm_extra_conf.py 模版位於./YouCompleteMe/third_party/ycmd/cpp/ycm/,其中-isystem flag用來配置系統頭文件路徑,-I用來配置第三方頭文件路徑, 一個支持C/C++工程的ycm_extra_conf.py部分配置文件如下:

'-std=c++11',
#'-std=c99',
# ...and the same thing goes for the magic -x option which specifies the
# language that the files to be compiled are written in. This is mostly
# relevant for c++ headers.
# For a C project, you would set this to 'c' instead of 'c++'.
'-x',
'c++',
'-isystem',
'../BoostParts',
#-isystem: system include file path
'-isystem', '/usr/include',
'-isystem', '/usr/local/include',
'-isystem', '/usr/include/c++/4.8.5',
]

YouCompleteMe查找.ycm_extra_conf.py過程是在當前編輯文件所在目錄查找,然后逐級向上查找,如果沒有找到則使用全局配置文件。

最后截圖:


免責聲明!

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



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