@uents blog

Code wins arguments.

EmacsでAnything+Auto Complete Mode+YASnippetによる快適コーディング

いままで普通にEmacsを使う生活を送っていて、それはそれで便利だったのですが、WEB+DB PRESSの総集編を読んで超絶便利なEmacs Lispがたくさんあることを知りました。特にAnything、Auto Complete Mode、YASnippetは1度触るとEmacsでのコーディングにマジで欠かせなくなります。これまで人生どんだけ損してきたんだってくらい感動したので、導入方法をざっくりまとめてみました。

環境

自分の環境は以下の通りです。

  • Mac OS X 10.7.3 (Lion)
  • Homebrew 0.8.1
  • Emacs 23.4.1 (Homebrewより取得)

HomebrewでEmacsをインストールする方法はこちらのエントリからどうぞ。

Auto Install

Anythingの前にAuto Installを導入します。Auto Installとは、指定したURLからEmacs Lispをダウンロードして所定の場所に保存した後バイトコンパイルまで通してくれるEmacs Lispです。EmacsWikiにリストアップされているEmacs Lispをダウンロードする際にも便利です。

インストール
M-x install-elisp RET http://www.emacswiki.org/emacs/download/auto-install.el
Emacsの設定

init.elに下記のコードを追加します。

(when (require 'auto-install nil t)
  ;; インストールディレクトリを設定する
  ;; 初期値は ~/.emacs.d/auto-install/
  (setq auto-install-directory "~/.emacs.d/elisp")

  ;; EmacsWiki に登録されている elisp の名前を取得する
  (auto-install-update-emacswiki-package-name t)

  ;; 必要であればプロキシの設定を行う
;  (setq url-proxy-services '(("http" . "localhost:8080")))

  ;; install-elisp の関数を利用可能にする
  (auto-install-compatibility-setup)
)

auto-install-update-emacswiki-package-name については有効にしておくと、Emacs起動時にelispのリストを取得しに行って起動が遅くなるようなので、普段はオフにしています。

Anything

Anything とは何かアクションを起こす度に選択肢のウィンドウ+候補の絞り込み検索を提供してくれるEmacs Lispです。

インストール
M-x auto-install-batch RET anything

Anything関連のEmacs Lispが芋づる式にダウンロードされるので、C-c C-cを連打してバイトコンパイルします。

Emacsの設定

init.elに下記のコードを追加します。

(when (require 'anything-startup nil t)
  (global-set-key (kbd "\C-x b") 'anything)
)

例えば上記の設定を行った場合、C-x bでAnythingを起動すると、現在のバッファリスト(Buffers)、最近開いたファイル(Recentf)、ディレクトリ直下のファイル(Files from Current Directory) のリストを表示してくれます。

この状態でフォーカスはミニバッファ(patterns:)に当たっていると思いますが、そのまま文字を入力すると、候補の絞り込みを行ってくれます。

複数のファイルを行ったり来たりする時や、いつもお決まりのファイルを開く際に効果を発揮します。

YASnippet

YASnippetとはコードスニペットを提供するEmacs Lispです。後述するAuto Comple Modeとも連携してくれるので、かなりありがたいです。

インストール

GitHubからクローンします。

$ cd ~/.emacs.d/elisp
$ git clone https://github.com/capitaomorte/yasnippet

クローンした後はバイトコンパイルを実行しましょう。

Emacsの設定

init.elに下記のコードを追加します。

(add-to-list 'load-path "~/.emacs.d/elisp/yasnippet")
(when (require 'yasnippet nil t)
  (yas/initialize)
  (yas/load-directory "~/.emacs.d/elisp/yasnippet/snippets")
  (yas/load-directory "~/.emacs.d/elisp/yasnippet/extras/imported")
  (yas/global-mode 1)
)

Auto Complete Mode

自動補完機能を提供するAuto Complete Modeを導入します。

インストール

GitHubからクローンしますが、auto-complete-yasnippet.elはついてないので別途取得します。

$ cd ~/.emacs.d/elisp
$ git clone https://github.com/m2ym/auto-complete.git
$ cd auto-complete
$ wget http://www.cx4a.org/pub/auto-complete-yasnippet.el

こちらもバイトコンパイルを実行。

Emacsの設定

init.elに下記のコードを追加します。ac-auto-startで補完候補を表示するまでの入力文字数を設定できるので、動作が重い場合などには増やしてみるとよいかと思います。

(add-to-list 'load-path "~/.emacs.d/elisp/auto-complete")
(when (require 'auto-complete-config nil t)
  (ac-config-default)
  (setq ac-auto-start 1)
  (setq ac-dwim t)
  (setq ac-use-menu-map t) ;; C-n/C-pで候補選択可能
  (add-to-list 'ac-sources 'ac-source-yasnippet) ;; 常にYASnippetを補完候補に
  (setq ac-dictionary-directories "~/.emacs.d/elisp/auto-complete/ac-dict") ;; 辞書ファイルのディレクトリ
  (setq ac-comphist-file "~/.emacs.d/elisp/auto-complete/ac-comphist.dat") ;; 補完履歴のキャッシュ先
)

デフォルトで対応していないモードについては、下記のように追加できます。

(setq ac-modes (append '(js2-mode)))

Auto Comple Mode+YASnippetを導入した状態でRubyのコーディングを行うと、以下のような画面になります。ポップアップで補完候補が表示されて、C-n/C-pで上下移動してRETで選択みたいな感じで操作できます。

他にも色々便利な機能があると思いますが、基本設定としてはまずはここまで導入しておくだけでもかなり便利になるかと思います。

最後に

手前味噌ですが、僕のinit.elをGitHubで公開しています。よかったら、参考にしてみてください。
https://github.com/uents/unix-dev/blob/master/dot.emacs.d/init.el

参考