■ Windows版 Emacs 共通の設定


【お知らせ】


<2017/05/25 追記>
Language Server Protocol client for Emacs というのもあるようです。

<2017/04/05 追記>
OmniSharp も面白そうです。

<2015/05/19 追記>
Cygwin版 Emacs に対応しました。設定を MinGW版 Emacs と Cygwin版 Emacs で共有できるようにするため、パスの指定方法を cygpathコマンド で言うところの unix形式 に統一しています。MinGW版 Emacs を利用する場合、Cygwin の導入、cygdriveプレフィクス の / 設定、cygwin-mount.el のインストールが行われていれば(gnupack-11.00 の標準設定)、うまく動くと思います。(もしうまく動かない場合には、パスを mixed形式(c:/foo/bar のような形式) に変更してみてください。)

<2015/05/18 追記>
Eclipse に pleiades をインストールする場合に eclimd が起動しない対策をアドバイスを用いて対応しました。
(この対応により、eclipse.ini の修正は不要となりました。)

【本題】


emacs-eclim を使うための設定です。

1) Eclipse、JDK をインストールする。

2015/5/18 時点で最新の eclim は、v2.4.1です。

このeclim を利用するには、Eclipse 4.4.x(Luna) と JDK 1.7 以上が必要です。

必要に応じて、pleiades もインストールしてください。

2) eclim をインストールする。

次のコマンドでインストールできます。途中、vimfiles のディレクトリがないと怒られますが、"作らない"(いいえ)を選択し、「Do not install vim files (emacs users only)」にチェックを入れ、進んでください。
java -jar eclim_2.4.1.jar

3) emacs-eclim、auto-complete をインストールする。

melpa からインストールしてください。

4) emacs-eclim の設定をする。

上記のページを参考にしながら、以下のような設定を行ってください。eclim-executable の変数の設定では、コメントに書いているとおり、ドライブの指定方法に留意してください。
また、Eclipse のインストールパスと workspace のディフォルトパスは適宜変更してください。
(require 'cl-lib)

(require 'eclim)
(global-eclim-mode)

(require 'eclimd)

(custom-set-variables
 '(eclim-eclipse-dirs '("/c/opt/eclipse"))

 ;; MinGW版 Emacs の場合、「c:/」を使った表記とすると eclim--call-process から
 ;; 呼ばれる shell-command-to-string が正常に動作しない。
 ;; (shell-quote-argument で追加されたエスケープ文字をうまく処理できないようだ。)
 ;; 理由は分らないが、「c:/」の前にスペースを入れるか、unixタイプのパスとすると
 ;; 動作することを確認している。
 ;; × '(eclim-executable "c:/usr/local/eclipse_4.4/eclim.bat")
 '(eclim-executable "/c/opt/eclipse/eclim.bat")

 '(eclimd-executable "/c/opt/eclipse/eclimd.bat")

 '(eclimd-default-workspace "/c/home/workspace")

 ;; eclimd の起動が完了するのを待たない(*eclimd* バッファで起動の状況を確認できます)
 '(eclimd-wait-for-process nil))

;; Eclipse に pleiades をインストールしている場合に eclimd が起動しないことの対策
(advice-add 'start-eclimd
            :around (lambda (orig-fun &rest args)
                      (let ((default-directory
                              (file-name-directory (expand-file-name eclimd-executable))))
                        (apply orig-fun args))))

;; executable-find によるチェックにより、eclimd が起動できない場合の対策
(advice-add 'start-eclimd
            :around (lambda (orig-fun &rest args)
                      (cl-letf (((symbol-function 'executable-find)
                                 (symbol-function 'identity)))
                        (apply orig-fun args))))

;; Workspace directory を windows形式のパス に変換する
(advice-add 'start-eclimd
            :before (lambda (orig-fun &rest args)
                      (interactive (list (read-directory-name "Workspace directory: "
                                                              eclimd-default-workspace nil t)))
                      (setf (nth 0 args)
                            (if (fboundp 'cygwin-convert-file-name-to-windows)
                                (cygwin-convert-file-name-to-windows (expand-file-name (nth 0 args)))
                              (expand-file-name (nth 0 args))))))

(when (eq os-type 'cygwin)
  ;; 作成するコマンドにファイルのパスが含まれていれば、mixed形式 のパスに変換する
  (advice-add 'eclim--make-command
              :around (lambda (orig-fun &rest args)
                        (cl-letf (((symbol-function 'shell-quote-argument-original)
                                   (symbol-function 'shell-quote-argument))
                                  ((symbol-function 'shell-quote-argument)
                                   (lambda (argument)
                                     (shell-quote-argument-original
                                      (replace-regexp-in-string "^/\\([a-zA-Z]\\)/" "\\1:/" argument)))))
                          (apply orig-fun args)))))

;; auto-complete の設定を行う
;; http://dev.ariel-networks.com/wp/documents/aritcles/emacs/part9
;; http://cx4a.org/software/auto-complete/manual.ja.html
(require 'auto-complete-config)
(ac-config-default)

;; emacs-eclim source の追加を行う
(require 'ac-emacs-eclim-source)
(ac-emacs-eclim-config)

;; 補完を自動的に開始しない
(setq ac-auto-start nil)

;; TABキーで補完を開始する(TABキーをコンテキストに応じて補完用のキーにする)
(ac-set-trigger-key "TAB")

;; 次候補、前候補を選択するキーを設定する
(define-key ac-complete-mode-map (kbd "C-n") 'ac-next)
(define-key ac-complete-mode-map (kbd "C-p") 'ac-previous)

;; デバッグメッセージを表示する
;; (eclim-toggle-print-debug-messages)

;; java-mode で eclim-mode を有効にする
(add-hook 'java-mode-hook 'eclim-mode)

5) eclimd を起動する。

M-x start-eclimd で起動してください。

正常に起動したかは、別途開く DOS窓 で確認してください。

なお、Windows から eclimd.bat をダブルクリックすることでも起動可能ですが、この場合、パラメータとして workspaceパスを渡すことができません。
次のページの「For Windows」で始まる行以降にこの対策方法が載っていますので、eclimd.bat を直接起動させたい方は参考としてください。

6) NTEmacsを立ち上げ、eclim-emacs を起動する。

M-x eclim-project-mode

7) Eclipse のプロジェクトを選択し、編集するソースファイルを開く。

8) eclim で始まるいろいろなコマンドを試す。

helm の場合、C-c C-e C-h でコマンドの一覧を確認できます。

9) eclimd を停止する。

M-x stop-eclimd で停止してください。DOS窓 の×で停止すると、Javaエラーとなります。


なお、M-x start-eclimd を使わずに Eclipse を GUI で立ち上げ、eclimd を起動する方法があります。
この場合は、5) の代わりに Eclipse を立ち上げ、メニューから以下を辿って eclimd を起動してください。起動は初回のみで OK です。

 日本語メニューの場合) ウインドウ > ビューの表示 > その他 > Eclim > eclimd
 英語メニューの場合)  Window > Show View > Other > Eclim > eclimd


また、eclimd を外部の DOS窓 を開かずに、Emacs のバッファ内で起動する方法があります。
ちょっとトリッキーな設定が必要となりますが、興味のある方は以下を参考にして試してみてください。

1) eclimd-executable の設定を次のとおりに変更する。
(custom-set-variables
  '(eclimd-executable "/c/opt/eclipse/eclimd.sh"))
Eclipse のインストールパスは適宜変更してください。

2) Eclipse のインストールディレクトリ(eclim.bat がある場所)に次のスクリプトを eclimd.sh として格納する。

eclimd.sh
#!/bin/sh
# -*- coding: utf-8-unix -*-

export SHELLOPTS
set -o igncr

function pwd() { cygpath -m `/bin/pwd`; } 
export -f pwd

`dirname $0`/plugins/org.eclim_2.4.1/bin/eclimd "$@"

3) eclimd を起動する。

M-x start-eclimd で起動してください。

正常に起動したかは、*eclimd* バッファを確認することでわかります。
こちらの環境では次のページに書かれている問題が発生したので、「%JAVA_HOME%\bin」をPathの一番最初に移動しました。

4) eclimd を停止する。

M-x stop-eclimd で停止してください。


<変更履歴>
  • 2014/09/26 このページを作成した。
  • 2014/09/27 start-eclimd と stop-eclimd を動かすための設定を追加した。
  • 2014/09/29 eclimd を eclimd.bat で起動した際の停止方法を追記した。
  • 2014/09/29 eclimd-wait-for-process の設定を追加した。
  • 2014/09/30 eclimd.sh のスクリプト内容の見直しを行った。
  • 2014/09/30 eclim-executable の設定内容を変更した。(「/c/」から始まる文字列を、最初にスペースの入った「 c:/」の文字列で始まるようにした。)
  • 2014/10/01 eclimd.bat の起動方法を変更した。また、eclimd.sh の内容を修正した。
  • 2015.05.18 Eclipse に pleiades をインストールする場合に eclimd が起動しない対策をアドバイスを用いて対応しました。(eclipse.ini の修正は不要となりました。)
  • 2015.05.19 Cygwin版 Emacs に対応した。
  • 2015/09/13 advice を Emacs-24.4 以降の書式に見直した。


最終更新:2019年11月03日 18:31