Java
Vim
Eclipse
eclim

eclim ことはじめ

More than 3 years have passed since last update.

OS X 環境で Java のコーディングに eclim を使い始めたのでメモ。

ちょっとずつ更新していくつもり。


きっかけ

これまで Java を書くときは Eclipse を使ってきて慣れていたのだけど、LL(php,ruby,python,perl) を書くときは Vim を使っていた。

たまたま、Java と LL 両方書く機会が訪れたので、これ全部 Vim で書いたら結構気楽にやれるのでは?と考えたのが最初。


インストール

Homebrew + CaskNeoBundle 使うとラク。


Cask で Oracle Java インストール

$ brew cask install java

さっくり Java 8 Update 20 が入った。Cask 素敵。


Cask で Eclipse インストール

$ brew cask install eclipse-java

さっくり Luna (Eclipse 4.4) が入った。Cask 素敵。


NeoBundle で Eclim インストール

.vimrc に以下を追加して :NeoBundleInstall する


.vimrc

    " for Java

NeoBundleLazy 'ervandew/eclim', {'build': {'mac': 'ant -Declipse.home=/opt/homebrew-cask/Caskroom/eclipse-java/4.4.0/eclipse -Dvim.files='.escape(expand('~/.bundle/eclim'), '')}}
autocmd FileType java NeoBundleSource eclim

ビルドプロセスに ant が要るので brew install ant しておく。

eclim 自体は filetype が java のときだけ有効にしてみたりした。後で不便になったら考える。


eclimd 起動

$ECLIPSE_HOME 以下(この場合は /opt/homebrew-cask/Caskroom/eclipse-java/4.4.0/eclipse/)に、eclim 関連のコマンドがインストールされているので、そこから eclimd を起動する。

$ $ECLIPSE_HOME/eclipse

Eclipse が普通に起動する。のだが、これだけだとまだ eclimd は起動していない。

詳しくは http://eclim.org/eclimd.html#headed-eclipse-server に書いてあるが、Eclipse の console window に eclimd を追加して無事起動となる。

この設定は一度 Eclipse を終了させれば保存されるが、再起動のたびに eclimd の console を選択しなければ eclimd が起動せず大変にめんどくさい。勝手に起動して欲しいけど方法はわかってない。


vim と eclimd の疎通確認

Vim から :PingEclim で確認。

eclim   2.4.0.11-ge560abe

eclipse 4.4.0

オッケー。


headless mode と headed mode

小話。eclimd には以下の二種類がある。


  • headed eclipse server (GUI あり)

  • headless eclipse server (GUI なし)

eclim は eclipse の機能のサブセットなので、デバッグ機能を使ったり特定の eclipse plugin の機能が欲しい場合は現状は前者を選ぶ他ないので、headed eclipse server で使うのが一般的だと思う。将来的に eclim だけで出来ることが増えてきたら、tty で全てが完結できる headless mode も魅力的ではある。

headless eclipse server は以下で起動する。

$ $ECLIPSE_HOME/eclimd


初期設定

:WorkspaceSetting して org.eclim.user.emailorg.eclim.user.name を設定する(どこに使われるのかよくわかっていない)。


便利機能

Eclipse の機能が普通に使えるよといえばそれまでなのだけど、まあ vim 自体の機能と一緒に使えるのはそれはそれで便利。


おすすめ設定

Java の Suggested Mappings に従うままに .vimrc を更新。


.vimrc

autocmd FileType java nnoremap <silent> <buffer> <leader>i :JavaImport<cr>

autocmd FileType java nnoremap <silent> <buffer> <leader>d :JavaDocSearch -x declarations<cr>
autocmd FileType java nnoremap <silent> <buffer> <cr> :JavaSearchContext<cr>
autocmd FileType java let g:EclimJavaSearchSingleResult = 'edit'

g:EclimJavaSearchSingleResult は vim のタグジャンプの挙動と合わせたかったので設定してみた(default は 'split')。操作感として vim のタグジャンプと統合されてると嬉しいけど贅沢は言わないことにする。

これだけでも <cr><C-o> でコードがどんどん読めるので、十分 Life Changing だなあ。


:ProjectProblems

QuickFix にエラーを表示してくれる。


:Validate

叱ってくれる。醍醐味。普通に直したり :JavaCorrect で直したり。


:JavaRename

まあ便利。そろそろ nnoremap するか。


:JavaMove

パッケージのリネームで使う。


:JavaFormat

まあ便利。保存と同時に動かしても良いかも。やろうと思えばすぐ出来るのが eclim の良いところ。


コード補完

デフォルトは omnifunc。あんまり使ってない。そもそも補完プラグインも入れてないからかも。

主要な補完系 vim plugins には対応している様子です。

http://eclim.org/vim/code_completion.html


所感

最初は Vim で Java のコードを書くためのニッチなプラグインなのかなと思っていたけど、どちらかというと Eclipse の機能と Vim の機能を両方使いたい(または組み合わせて使いたい)人向けの環境なのだと考えるようになった。

その他もろもろ。


  • コーディング中はターミナルから出ないで済むので快適

  • Eclipse と Vim の使用経験があると予想よりとっつきが良いものだと思う

  • Eclipse と Vim のブリッジにすぎないので eclim 固有のトラブルは少ない

  • Eclipse のサブセットといっても機能が多く、また全部の機能を使う必要もないと思う (Eclipse 自体がそうだし)

  • Java 8 で lombok 使ってる、みたいなモダンな Java だから良いと感じる、というのは正直あると思う

  • eclim 自体がプロジェクトとしてしっかりしてる感じがする。特にドキュメント。

  • サーバサイドのコードを複数の言語で書く人には薦められるかも。これで Android のコーディングしようとは思わないw

  • Vim と Eclipse の両方にロックインされてしまった感


やりたいこと

やりたいけどやり方がわかってないことを書いていく


  • eclipse 起動と同時に eclimd を起動(切実)

チートシートも読み込みが足りない様子だった http://eclim.org/cheatsheet.html


解決したこと



  • mvn eclipse:eclipse した後に再起動するのがめんどう :ProjectRefresh でいけた


最後に

自分も eclim 使ってるよー、という方いらっしゃいましたら、コメントや編集リクエストお待ちしております。