Emacsでプログラムを書く環境を整えたくて設定等をしているのですが、そのうちで困っているのがJava。
これまで、普通にjava-modeで書いていたのですが(会社ではJDEE使っていました…)、ちょっとこれをなんとかしたくて。
で、最初にチャレンジしたのがmalabar-mode。
malabar-mode
https://github.com/m0smith/malabar-mode
Mavanと統合できてよさそうみたいな感じだったのですが、Melpaから入れたところelispでエラーになって、うまく起動せず…。手順通りcedetをmakeしたり、昔のバージョンを引っ張ってきたりしましたけど、解決できず挫折。
まあ、補完ができればいいかぁくらいに思っていたので、他に名前をちらほら見ていたauto-java-completeを導入することにしてみました。
auto-java-complete
https://github.com/emacs-java/auto-java-complete
インストール
elispのパスが通っている場所で、auto-java-completeをGithubからclone。Melpaには入っていません。
$ git clone https://github.com/emacs-java/auto-java-complete.git
タグファイル
auto-java-completeを動作させるためには、タグファイルというものが必要なようです。Javaの基本的なAPIが定義されたデフォルトのものは
java_base.tag.bz2
としてcloneしたディレクトリに入っているので、これを展開して
${HOME}/.java_base.tag
という名前で配置すればOKだったりもします。
ただ、これだと定義済みの範囲でしか補完できないので、補完対象を追加するには、自分でタグファイルを生成します。
cloneしたディレクトリに、
Tags.java
というファイルがあるので、これをコンパイル。
$ javac Tags.java
あとは、生成したい対象をクラスパスに加えて、このクラスを実行します。
$ java -cp /usr/lib/jvm/java-8-oracle/jre/lib/rt.jar:. Tags
つまり、補完対象を変えたかったらタグファイルを作れと…。
設定
設定は、Emacsの設定ファイル(init.elとか)に以下を設定。
; yasnippet (require 'yasnippet) (yas/global-mode 1) ;; auto-complete (require 'auto-complete) (global-auto-complete-mode t) (define-key ac-complete-mode-map "\C-n" 'ac-next) (define-key ac-complete-mode-map "\C-p" 'ac-previous) ;; auto-java-complete (require 'ajc-java-complete-config) (add-hook 'java-mode-hook 'ajc-java-complete-mode)
あとは、Javaファイルを開くと勝手に補完してくれるようになります。
これで、一歩前進ですね。
参考)
emacs 23系でのJava編集
http://d.hatena.ne.jp/torutk/20120422/p1
EmacsでJava〜ajc-java-completeを使う
http://boronology.blogspot.jp/2012/01/emacsjavaajc-java-complete.html
Android開発にも役立つEmacsの補完プラグイン - Ajc-java-complete
http://blog.clouder.jp/archives/001141.html