vim+ycm+eclim+javacomplete解決衝突

四個主角各自的作用:
vim:編輯器一枚
ycm:自動補全插件(也就是不用按ctrl+x ctrl+o來調用vim的omni全能補全)
eclim:讓vim可以有部分eclipse的功能,也可以管理eclipse裏的項目
javacomplete:一個java的補全插件(這裏說的是增強版的)

各自網址:
ycm:https://github.com/Valloric/YouCompleteMe
eclim:http://eclim.org/
javacomplete:https://github.com/artur-shaik/vim-javacomplete2

這篇文章的主要目的不是如何安裝和使用這些插件,而是解決eclim和javacomplete之間的衝突

在說衝突之前先說下eclim和javacomplete的生效條件:
eclim:編輯的java類型的文件必須是eclipse中的一個項目中的文件
javacomplete:只要是java類型的文件都可以補全

什麼衝突呢?
ycm可以使用vim的omnifunc提供的數據來完成java的自動補全,主要依據在當前打開的java文件的buffer中,執行:set omnifunc返回的結果來確認到底用eclim還是javacomplete提供的補全數據
衝突就是如果同時使用這兩個插件,那麼只要打開java類型的文件,那麼就會被自動命令設置成javacomplete的補全,即便是打開eclipse項目中的文件也不會是eclim的補全

解決方法:
判斷打開的java文件是否是eclipse項目中的文件就行了,判斷方法是調用eclim插件的一個方法,當是項目文件時,就不設置javacomplete的補全,如果不是,就設置omnifunc爲javacomplete的補全,講下面的東西粘貼到vimrc中,另外不要在其他地方設置java的omnifunc:

" vim-javacomplete2
" java的omni全能補全(insert模式下ctrl-x-ctrl-o調用),ycm將會自動調用
" 與eclim的自動補全衝突,所以先判斷當前文件是否是項目文件
" 如果不是項目文件才使用vim-javacomplete2進行全能補全
function! IsProjectFile()
    let projectName = eclim#project#util#GetCurrentProjectName()
    if projectName == ''
         setlocal omnifunc=javacomplete#Complete
    endif
endfunction
autocmd FileType java call IsProjectFile()

" eclim/eclimd
" 需要自行安裝,不在vim-plug插件管理器管理列表之中
" eclimd讀取$ECLIPSE_HOME/configuration/config.ini
" 還讀取~/eclimrc配置文件
" 日誌級別,日誌文件默認在workspace/eclimd.log
" 除了默認的info,還有trace,debug,warning,error,off
let g:EclimLogLevel = 'info'
" 設置瀏覽器,firefox,mozilla,opera,iexplore
let g:EclimBrowser = 'firefox'
" 讓eclim配合ycm實現java等語言的自動補全
" 編輯的文件必須是eclipse的一個項目中的文件纔會自動補全
" 這個變量的作用是(僅舉例java文件):set omnifunc=eclim#java#complete#CodeComplete
let g:EclimCompletionMethod = 'omnifunc'

javacomplete和eclim都需要自己安裝具體如何安裝可以去上面提供的網址去查看和下載,不會因爲添加了這幾行配置就可以實現java的補全了,本文中使用的插件管理器是:vim-plug
另外推薦一份vim的配置,使用簡單,配置文件結構清晰,註釋明瞭,很適合不熟悉vim配置的人入手學習:https://github.com/wklken/k-vim

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章