X なしで Eclim を使う方法。
導入
Vagrant や Docker の流行により、気軽に仮想マシンを使う時代になっています。すると開発にも仮想マシンを使うようにしてホストマシンはできるだけ汚さない方向に持って行きたいことになる。手軽に使いたいため当然 X 環境などは構築しない。
ここで問題になるのは IDE を前提にした言語。 IDE はウィンドウシステムの中で動くため、仮想マシンを X なしで使うと IDE の機能を使えず開発が厳しくなってくる。
具体的に言うと Java 、ジャバ、ジャヴァである。
書くときはあまりにも長い名前をタイプしたくないため補完が欲しくなり、読むときは名前解決のためのタグジャンプが欲しくなる。
追記
僕のモチベーションは VM の中に開発環境を閉じ込めてしまいたくて、かつ X を使いたくないところにあります。そうじゃない人はホストマシンで開発なり VM で X 使うなりしたほうが幸せだと思います。
Eclim
Eclim は Eclipse の機能を Vim を始めとする各種エディタで使うインターフェースを提供するソフトウェアです。ネットワーク越しに Eclipse の機能を叩いています。
ウィンドウシステムありの環境においては、 Eclipse と Vim のインターフェースを両方使いたいか否かによって、次の使い方があります。
- Eclipse を立ち上げず、 Eclim デーモンを立ち上げて Vim で Eclim と通信
- Eclipse を立ち上げて、外部エディタとして Vim で Eclim と通信
- Eclipse を立ち上げて、 Eclipse 内に埋め込まれた Vim で Eclim と通信
ここでは X 環境を構築しないので、 1. の使い方をすることになります。
必要なもの
- Eclipse 4.3.2
- Eclim 2.3.2
- 最新版の Eclim 2.3.4 では動かなかった
- Xfvb
- 仮想 X サーバ
- build-essential とかそのへんのやつ
インストール
Ubuntu では
$ sudo apt-get install openjdk-6-jdk xvfb build-essential
$ wget <eclipse_mirror>/eclipse-<version>-linux-gtk.tar.gz
$ tar -zxf eclipse-<version>-linux-gtk.tar.gz
$ java -Dvim.files=$HOME/.vim \
-Declipse.home=$HOME/eclipse \
-jar eclim_2.3.2.jar install
こんな感じです。
Eclim 2.3.4 および 2.3.3 では動かなかったので 2.3.2 を使っています。
使い方
Xvfb で仮想 X サーバを立ち上げて、その上で Eclipse および Eclim を起動し Vim から利用します。
$ Xvfb :1 &
$ DISPLAY=:1 ./eclipse/eclimd start
すると Eclim デーモンが立ち上がるので、 Vim を立ち上げて
:PingEclim
でバージョンが返ってくることを確認。
:ProjectCreate /path/to/my_project -n java
でプロジェクト作成。
補完
$ mkdir -p /path/to/my_project/src/a/b/c
$ vim /path/to/my_project/src/a/b/c/X.java
package a.b.c;
class X {
public static void main(String[] args) {
}
}
ここまで書いたところで、 main
の中に
System.
と入力して <C-x><C-u>
を入力しましょう。すると補完候補が表示されるはず。他にも、次のように
package a.b.c;
class X {
private static ArrayList<Integer> lst = new ArrayList<Integer>();
public static void main(String[] args) {
System.out.println("Hello, Eclim!");
}
}
ArrayList
の import
宣言がありませんが、 ArrayList
の上にカーソルを持って行き :JavaImport
と叩くと import
を追加してくれます。また、この lst
について
lst.<C-x><C-u>
で ArrayList
のメソッドも補完してくれます。
タグジャンプ
package a.b.c;
class Y implements Runnable {
public void run() {
System.out.println("Hello from Y");
}
}
package a.b.c;
class X {
public static void main(String[] args) {
Y y = new Y();
y.run();
}
}
run
の上に行き :JavaSearchContext
でクラス Y
の run()
メソッドにジャンプできます。
他の言語
http://eclim.org/vim/index.html によると
- C/C++
- Html / Css
- Java
- Javascript
- Php
- Python
- Ruby
- Scala
- Xml / Dtd / Xsd
に対応しているらしい。僕も Scala で使いたいので試してみる。
コマンド一覧
http://eclim.org/cheatsheet.html を一通り見ておくと良いと思います。