eclim ことはじめ


OS X 環境で Java のコーディングに eclim を使い始めたのでメモ。
ちょっとずつ更新していくつもり。

## きっかけ
これまで Java を書くときは Eclipse を使ってきて慣れていたのだけど、LL(php,ruby,python,perl) を書くときは Vim を使っていた。
たまたま、Java と LL 両方書く機会が訪れたので、これ全部 Vim で書いたら結構気楽にやれるのでは？と考えたのが最初。

## インストール
[Homebrew](http://brew.sh) + [Cask](http://caskroom.io) と [NeoBundle](https://github.com/Shougo/neobundle.vim) 使うとラク。
### 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` する

```vim:.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` で確認。

```raw:
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.email` や `org.eclim.user.name` を設定する（どこに使われるのかよくわかっていない）。


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

### おすすめ設定
Java の [Suggested Mappings](http://eclim.org/vim/java/index.html#suggested-mappings) に従うままに .vimrc を更新。

```vim:.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

### 解決したこと
* <del>mvn eclipse:eclipse した後に再起動するのがめんどう</del> :ProjectRefresh でいけた

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