Eclimというプラグインを使うと、Vimなどのエディタで、Eclipseの機能を使うことができる。

3つのシナリオがあって

  1. Eclipseを立ち上げないで、eclidを起動してVimだけで使う方法
  2. Eclipseを立ち上げて、ファイル上で右クリック、「次で開く」-「Vim」で編集する
  3. Eclipseを立ち上げて、設定を変更して、埋め込まれたVimで編集する

Eclipseも使いたいので、2,3の方法を取りたいけど、2も3もVimが立ち上がるのが遅いし、2で開いたVim上で新しいファイルを開こうとすると落ちる。

なので、Eclimデーモンを立ち上げて、vimは普通に立ち上げて編集すると良い。

Eclimは「Window」 -> 「Show View」 -> 「Other」 -> 「Eclim」 -> 「eclimd」で立ち上がる。

右クリック、「次で開く」に、普通のgVimを加えるには「設定」-「エディター」-「ファイルの関連付け」で「ファイル・タイプ」を選び、「関連付けられてエディター」にgVimを加える。

インストール

Download / Install — eclim (eclipse + vim)を見て、インストールする。eclim_?.?.?.jarをダウンロードして、ダブルクリックし、設定をしていけばおk。

結構更新頻度が高いので、neobundleでソースを引っ張ってきて、ビルドしてインストールするのもいいかも。gitでソース引っ張るのに10分弱かかるので注意。neobundleの設定は例えば以下のようにする。

if isdirectory(expand('~/pleiades/eclipse'))
    NeoBundle 'ervandew/eclim', {
                   'build' : {
                       'windows' : 'ant -Declipse.home='.escape(expand('~/pleiades/eclipse'), '')
                                     .' -Dvim.files='.escape(expand('~/.vim/bundle/eclim'), ''),
                   }
                }
endif

antが必要。Eclipseのpluginフォルダ以下にEclipseのプラグインが、vim.filesで指定したフォルダに、vimプラグインがインストールされる。windowsとなっているところをmacやunixに変更すれば、Mac, Linuxでもインストールできるはず。escapeでを\に変換しているのは、そうしないとファルダ区切りのバックスラッシュが全部消えてしまったため。

設定

quickfixの文字列が文字化けしないように、eclipse.iniの最後に-Dfile.encoding=utf-8をつけておく。

NeoComplcacheを使っている人は、

let g:EclimCompletionMethod = 'omnifunc'

と設定してやると、omifuncとして補完してくれる。

Tips

:ProjectProblemsでEclipseの問題タブと同じ内容がQuickfixに表示される(Eclipse Project Management — eclim (eclipse + vim))。

:JavaImportOrganizeで必要なimport文が追加され、不要なものは削除される。

問題

g:EclimProjectProblemsUpdateOnSave = 1にしても、XMLの場合は更新されない。

eclim/autoload/eclim/lang.vimにある、eclim#lang#UpdateSrcFile()で、g:EclimProjectProblemsUpdateOnSaveをみて、更新しているようだが、eclim/ftplugin/xml.vimのautocmdををみてみるとeclim/ftplugin/java.vimのautocmdにある

autocmd BufWritePost <buffer> call eclim#lang#UpdateSrcFile('java')

がないため更新しないようだ。

代わりに

autocmd BufWritePost <buffer> call eclim#xml#validate#Validate(1, '!')

が書かかれている。

eclim/autoload/eclim/lang.vimのeclim#lang#Validate()の上のコメントによると

" Validates the current file. Used by languages which are not validated via
" UpdateSrcFile (pretty much all the xml dialects and wst langs).

らしい。

.vim/after/ftplugin/xml.vimに以下を

[vim]

function! s:has_plugin(plugin)

return !empty(globpath(&runtimepath, ‘plugin/’ . a:plugin . ‘.vim’))

|| !empty(globpath(&runtimepath, ‘autoload/’ . a:plugin . ‘.vim’))

|| !empty(globpath(&runtimepath, ‘colors/’ . a:plugin . ‘.vim’))

endfunction

if s:has_plugin(‘eclim’)

augroup my_eclim_xml

autocmd! BufWritePost

autocmd BufWritePost let project = eclim#project#util#GetCurrentProjectName()

| if project != “”

| call eclim#lang#UpdateSrcFile(‘xml’)

| endif

augroup END

endif

[/vim]

加えて、自動的に更新するようにしたかったが、二回保存しないと、反映されなかった。

関連