WindowsでGNU Emacsを使う

RのためにGNU Emacsを入れたい!
EmacsGNUプロジェクトの中で作られた、高機能なエディタである。他のGNUソフトウェアと同じくWindowsユーザにはあまり馴染みのないエディタだが、慣れれば非常に使いやすくコマンドを覚える必要がある分エディタを使いこなしている気分になれる優れものである。
Emacsは高機能であるものの、Windowsユーザにとっては必須ツールではなく、(良いものがあるかは別として)豊富なエディタやIDEが提供されているので導入せずとも困ることは少ない。
ただ、WindowsR言語を使う場合は、付属のRguiは使い勝手が悪く、IDERstudioでは重く使いにくいという問題がある。
RguiやRstudioの中間程度、ある程度使いやすくそれなりに軽いエディタEmacsを導入したいというのが今回の目的である。
Windows用のEmacsはいくつか種類があり、Wikipediaによれば

などがあるらしいが、特に根拠のない主観的な話をすれば、MeadowとGNUEmacsのシェアが高いような気がする。
今回はGNU Emacsを例にとって説明する。
GNU Emacs自体にRを扱い機能は実装されていないが、Emacs Speak Statisticsを導入することで、エディタ内でRを実行できるようになる。
(最近の)GNU Emacsであれば、インストール時に既にESSが含まれているので、特に何もすることなくESSの導入が済むので非常に楽である。(ただ後述するように日本語入力に難がある)

WindowsEmacsの種類

上で述べたようにWindowsEmacsはいくつか種類があり一長一短な部分がある。ざっくりまとめると以下のような感じ。

  • GNU Emacsは日本語入力がやや面倒であるが、標準でESSが入ってる。
  • gnupackのGNU EmacsはESSは入ってないが、日本語入力が楽。
  • MeadowもESSは入ってないが、日本語入力が楽。

今回説明するのはgnupackのGNU Emacsである。

gnupackのGNU Emacsの導入と日本語

標準のGNU Emacsは日本語入力に対応しておらず(入力はできるが)、日本語入力を行うと入力が確定するまで、何を入力しているのか分からない状態でインライン入力できない上に、変換候補も環境によるが右下にでたり使いにくい。Emacs付属のIMEC-\で使用でき、日本語入力を行えるが、他のIMEと比べるとあまり使い勝手の良いものではない。
なので、できればMSIME,ATOK,GoogleIME*1を使いたいと考えるのが普通だと思う。
Meadowであれば標準で、MSIMEやATOKでの入力が可能らしい(参考)ので、面倒だと思う人はそちらを導入しても良いだろう。
GNU Emacsを頑なに使いたい人は、パッチを当てたソースをビルドすれば良いらしいが面倒である。今のところ、心優しい方がパッチを当てたものをgnupackとして公開しているので、そういう頑な人はそちらを利用すればよい。(前記したようにgnupackにはESSは入っていないので、別個インストール必要であるが)
gnupack Users Guide
上記サイトからemacs for gnupackをDLし、適当なフォルダに解凍すれば導入は完了である。解凍したフォルダ内のbin/runemacs.exeを実行すればEmacsが利用できる。ショートカットをデスクトップなどに作っておいても良いだろう。
特に何も設定していない状態では、Emacsを起動するとC:\Users\ユーザ名\AppData\Roamingに「.emacs.d」というemacs用の設定フォルダが作られる。設定フォルダの場所を変更したいなら、初回起動の前に、環境変数HOMEに保存場所を指定すればそちらに作られる。Emacsは設定ファイルを変更して、機能を拡充できるため、アクセスしやすい場所に変更しておいても良い。
Emacs基本的な使い方などは特に説明しないが、起動後に表示されるEmacs Tutorialを読めば事足りると思う。

ESSの導入

以下のサイトを参考に説明する。
gnupackを使い、Emacs+R+ESS on Windows 7の環境を設定した - ryamada の弟子日記(遺伝学・統計遺伝学のメモ)
ESSをDLする前に2つ準備しておく。
まず、Emacsを一度起動して作成された.emacs.dフォルダの下にelispというフォルダを作成する。
次に、同じく.emacs.dフォルダの下にinit.elというファイル名でファイルを作り、中身を以下のように書いておく。

;;; load-pathの追加関数
(defun add-to-load-path (&rest paths)
  (let (path)
    (dolist (path paths paths)
      (let ((default-directory (expand-file-name (concat user-emacs-directory path))))
        (add-to-list 'load-path default-directory)
        (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
            (normal-top-level-add-subdirs-to-load-path))))))

;; load-pathに追加するフォルダ
;; 2つ以上指定する場合の形 -> (add-to-load-path "elisp" "xxx" "xxx")
(add-to-load-path "elisp")
;;; ESSの設定
(require ' ess-site)

準備は以上で終わりで、ESSを導入する。
ESSのサイトから最新版のESSをDLする。
ファイルを解凍し、出てきたフォルダ(ess-12.09とか)をさきほど作ったelispフォルダにフォルダごと移動させる。
Emacsを起動させエラーがでなければインストール終了。

ESSの使い方

簡単に使い方を書いておく。
ESSインストール後は、拡張子がrのファイルを読み込めば自動的にRと認識し、ESSモードに入る。ファイル内のコードを実行したい場合
現在編集中の関数の実行

C-c M-f

現在編集中のファイルの実行

C-c M-b

で実行できる。

ESSとEmacsのコマンド

以下のサイトにEmacs+ESSのチートシートがあるので、印刷して手元においておくとよい。
ESS - RjpWiki

init.el

通常Emacsの設定ファイルは.emacsであるが、Windowsだと普通の方法ではファイル名が拡張子のみのファイルは作成できないので、init.elで代用できるようになっている。勿論Windowsでも.emacsも利用可能でその場合は.emacs.dフォルダの下に置くのではなく、HOMEで指定したパスかデフォルトなら.emacs.dと同階層のC:\Users\ユーザ名\AppData\Roamingに配置する。