もう初心者なんて言わせない、Anything で始まる Emacs 道。
追記 この記事を元に書籍が出来ました!
時間と命を削って、より詳細に解説しましたので、Emacs に興味がある人はぜひ一度手に取ってみて下さい。
Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)
- 作者: 大竹智也
- 出版社/メーカー: 技術評論社
- 発売日: 2012/03/07
- メディア: 単行本(ソフトカバー)
- 購入: 22人 クリック: 396回
- この商品を含むブログ (1件) を見る
たぶん、現 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 の色々な機能を、ひとつのインターフェースに統合して、
- 起動
- 一覧表示
- 絞り込み
- 選択
- アクション
という流れで、全ての操作を行なってしまうことができるというわけです。
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記事に大筋纏められています。
- 巷で話題の anything.el を使ってみた — ありえるえりあ
- anythingの設定方法 まとめwiki - source一覧
- EmacsWiki: Anything Sources
- anything-config.el のコメント
先程の例では、単純に追加しましたが、今度はリスト毎作りかえてしまいます。
(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 についてもっと知りたい人は、以下のリンクからの記事を見れば、かなり理解が深まるでしょう。
- EmacsWiki: Anything
- [anything] - (rubikitch loves (Emacs Ruby CUI))
- EmacsにPHPの補完を実装するマイナーモード、php-completion.elをリリースしました。
- cperl-modeにanythingを使った補完機能を追加するperl-completion.elをcodereposにコミットしました - IMAKADO::BLOG
- タグ「anything」を含む新着エントリー - はてなブックマーク
- タグ「anything.el」を含む新着エントリー - はてなブックマーク
まぁ、書いてみて思ったけど、Anything は紹介するにはヘヴィー過ぎますね。