もう初心者なんて言わせない、Anything で始まる Emacs 道。

追記 この記事を元に書籍が出来ました!

時間と命を削って、より詳細に解説しましたので、Emacs に興味がある人はぜひ一度手に取ってみて下さい。

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)

僕が Emacs を使いはじめたのは、MacBook を買ってからなので、月日が短く、まだ1年半くらいしか経っていないのですが*1Emacs を使い始めてすぐに至るところで目にしたのが Anything という単語でした。
たぶん、現 anything.el のメンテナの id:rubikitch さんの記事今anything.elがアツいあたりを見て知って、使い始めたと思うのですが、anything脳という言葉も飛び出るほどの中毒者続出の今や Emacs に必ず無くてはならない存在となっております。
というわけで、一人前の Emacser になるために、今や欠かす事のできない anything について、出来るだけ分かりやすく楽しく紹介したいと思います。

Anything って何?

巷で話題の anything.el を使ってみた — ありえるえりあにもあり同じ言葉がありますが、

「open anything」できるようになるらしいのですが、少し抽象的で分かりづらいと思います。簡単に言えば、複数の機能をひとつのインターフェースに統合してしまうということです。

巷で話題の anything.el を使ってみた — ありえるえりあ

とあります。僕の言葉で表しみても、Anything は統合インターフェースになります。ではなぜ、インターフェースにここまでみんなが熱狂的になるのでしょうか?

絞り込み・リストアップ・汎用性

Anything の素晴しさを3つ挙げるとすると、僕は、絞り込み・リストアップ・汎用性を挙げます。
では、Anything の無かった時代の話をしてみましょう。
例えば、バッファを切り替える場合、

Anything が無い頃は、iswitch を使うのが一般的だったと思いますが、C-x b でバッファを切り替えようとすると、ミニバッファにバッファ一覧が表示されて、左右で選択するか、バッファ名をタイプして部分マッチで絞り込むという形でした。
Emacs のコマンドを実行するのはどうでしょうか?

M-x してから、コマンド名を何文字かタイプして TAB で補完、絞り込まれた結果が表示されるので、残りの名前をタイプして補完して実行という流れですね。

似てる作業なのにインタフェースが違う -> Anything で統合。

Anything はその名の通り、なんでも Anything でしてしまおうというものです。なので、バッファの切り替えも、コマンドの実行も、はたまたグーグル検索も Anything で行なう事ができます。
Anything を起動すると、登録してある候補元(ソース)から、文字をタイプする必要のないものの一覧が表示されます(例えば、バッファであれば、開いているバッファ全て)。続いて、何か文字をタイプすると、文字から絞り込まれた一覧が表示されます(例えば、コマンドなどはタイプしてから表示されます)。

「any」とタイプしたところ、any という文字を含むバッファの一覧や、コマンドの一覧が表示されました。
つまるところ、Anything というのは、Emacs の色々な機能を、ひとつのインターフェースに統合して、

  1. 起動
  2. 一覧表示
  3. 絞り込み
  4. 選択
  5. アクション

という流れで、全ての操作を行なってしまうことができるというわけです。
Anything で色々な操作が行なえるという事は、色々な操作をするために、色々なキーバインドを覚える必要もなく、何をするにしても Anything -> 絞り込み -> 実行 という一連の操作だけで済ませる事ができるというわけです。素晴しいですね!

Anything をインストールしよう。

さっそく、Anything をインストールしてみましょう。
以前、紹介した install-elispを使って、インストールしても良いのですが、AutoInstallという AndyStewart さんが作った、Elisp インストーラーを使うと、複数の Elisp を一発でインストールできるので、こちらを先にインストールしましょう。

M-x install-elisp RET http://www.emacswiki.org/emacs/download/auto-install.el RET

RET はリターンを押して下さい。もう慣れたものですよね?
install-elisp を使ってインストールした Elisp は既に読み込まれていてコマンドが使えるのですが、終了すると読み込まれていない状態に戻ってしまうので、次回起動時も使える様に .emacs に設定を書きます。

;; (2) And put the following in your ~/.emacs startup file:
(require 'auto-install)
;; (3) Add this to your ~/.emacs to optionally specify a download directory:
(setq auto-install-directory "~/.emacs.d/elisp/")
;; (4) Optionally, if your computer is always connected Internet when Emacs start up,
;;     I recommend you add below to your ~/.emacs, to update package name when start up:
(auto-install-update-emacswiki-package-name t)
;;     And above setup is not necessary, because AutoInstall will automatically update
;;     package name when you just first call `auto-install-from-emacswiki',
;;     above setup just avoid *delay* when you first call `auto-install-from-emacswiki'.
;;
;; (5) I recommend you add below to your ~/.emacs for install-elisp users:
(auto-install-compatibility-setup)

auto-install.el ファイルに設定に関するコメントがあるので、それに従って設定しましょう。(auto-install-compatibility-setup) を使うと、install-elisp と同じ動作になります。
次は Anything のインストールです。

M-x auto-install-batch RET anything RET


すると、いつものように、ダウンロードされた elisp がバッファに表示されますので、C-c C-c をタイプしてインストールを完了しましょう。
ただし、通常とは違い、anything.el, anything-config.el, anything-match-plugin.el の3つのファイルがダウンロードされているので、インストールが完了した後は、C-x k でバッファを閉じて、次のファイルを C-c C-c でインストールしましょう。

Anything を使ってみる。

.emacs に anything を読み込む設定を書きましょう。

(require 'anything)

M-x anything を実行してみましょう。
すると、Anything 標準の設定でのソースによる一覧が表示されます。

Anything は、ソースを追加する事で、あなたの好みの候補一覧、表示順を演出してくれます。Emacs コマンドを表示するソースを追加してみましょう。

(require 'anything-config)
(add-to-list 'anything-sources 'anything-c-source-emacs-commands)

Emacs コマンドを表示するためのソースは、anything-c-source-emacs-commands という名前で、anything-config.el に登録されています。ですので、まず、anything-config.el を読み込みます。
次に、標準のソース一覧のリストが入っている anything-sources 変数に、anything-c-source-emacs-commands を追加します。この例では、単純に追加していますが、自分の好みでソースを取捨選択する設定を後述しますので、通常は単純に追加するのではなく、自分のリストを作り直す形になるでしょう。
設定は .emacs に書いた後、いちいち再起動せずとも、行末で C-x C-e で評価すればすぐに有効になります。評価については、Emacs設定講座 その3「scratch バッファと eval(評価)」。をどうぞ。
評価後に、再び M-x anything を実行して、any とタイプすると、any を含む Emacs コマンドが一覧される様になりました。

ここまでのまとめ。
  • anything をインストールして読み込む。
  • anything-sources にソースを入れると anything がより便利になる。

Anything をコマンドで呼び出せる様にしてみる。

毎回 M-x anything をタイプするのは面倒なので、自分の好みのキーバインドで呼び出せる様にします。Emacs を使っている上で、頻繁に使うコマンドはどんどんキーバインドを登録しましょう。
キーバインドの登録の仕方は、Emacs設定講座「キーバインドよ、俺色に染まれ。ア!!」。に詳しく書いてあります。

(define-key global-map (kbd "C-l") 'anything) ; けんたろさんはこれっぽい
(define-key global-map (kbd "C-;") 'anything) ; そのお隣り
(define-key global-map (kbd "C-x b") 'anything) ; ありえるの人はこれらしい

など、それぞれお好みのキーバインドに設定しましょう。ちなみに、僕は、MacBook を使っているので、Cmd キーを Super にした上で、Super a にしております。

(when (eq system-type 'darwin)	     ; もし、システムが Mac のとき
  (setq mac-command-key-is-meta nil) ; コマンドキーをメタにしない
  (setq mac-option-modifier 'meta)   ; オプションキーをメタに
  (setq mac-command-modifier 'super) ; コマンドキーを Super に
  (setq mac-pass-control-to-system t)) ; コントロールキーを Mac ではなく Emacs に渡す

(define-key global-map [(super a)] 'anything)

という感じ。Mac の人は、Cmd キーをメタにすると、色々と勿体ないので、Super とか Hyper にしておいた方が吉です。登録できるキーバインド数も増えますし。Cmd + v で yank とか設定しておくと、Mac 標準の動作と同じで違和感が出ません。

Anything のソースを追加してみる。

Anything のソースについての紹介は、以下の3記事に大筋纏められています。

先程の例では、単純に追加しましたが、今度はリスト毎作りかえてしまいます。

(setq anything-sources
      '(anything-c-source-buffers+
	anything-c-source-colors
	anything-c-source-recentf
	anything-c-source-man-pages
	anything-c-source-emacs-commands
	anything-c-source-emacs-functions
	anything-c-source-files-in-current-dir
	))

setq という関数を使って、新なリストを代入します。代入は追加ではないので、以前の内容は綺麗さっぱり消えてなくなります。
anything-c-source-recentf は、開いたファイルの履歴から絞り込んでくれる非常に便利なソースですが、設定しないと使えないので設定します。
最新の anything-config.el には、recentf の設定が書かれているので、この設定は無くても大丈夫です。

(require 'recentf)
(setq recentf-max-saved-items 1000)
(recentf-mode 1)


これで、履歴一覧が表示され、一度開いたファイルは、Anything から絞り込んで開く事ができる様になりました。深い階層にあるファイルもこれですぐに開く事ができますね。

その他の設定

設定すればするだけ強くなれる Emacs ですが、Anything はその中でも圧倒的な、そう双葉山クラスの名横綱です。
rubikitch さんの公開している設定 RubikitchAnythingConfiguration を見ても、よく分かると思います。
とりあえず、今回は Anything の導入と、その一部の機能を紹介しましたが、また気が向いたら他の設定も紹介したいと思います。
Anything についてもっと知りたい人は、以下のリンクからの記事を見れば、かなり理解が深まるでしょう。

まぁ、書いてみて思ったけど、Anything は紹介するにはヘヴィー過ぎますね。

この記事の関連記事

*1:それまでは、WindowsEmacs ライクなエディタの xyzzy だったので、さほど苦労はありませんでした。