今週はEmacsでのプログラミング環境のまとめとして、Emacsでの編集作業に役立つ便利な拡張機能を紹介します。
分岐したアンドゥの履歴を管理する undo-tree
エディタにおいてアンドゥ、リドゥはとても便利な機能ですが、アンドゥした後に新しい入力を行うと、リドゥができないというジレンマがあります。以下のようなケースを想定してみてください。
- Aを入力する
- Aの入力をアンドゥ
- Bを入力する
- やっぱりAに戻したい <- これはできない
このような、ツリー状に分岐する入力の履歴を管理し、任意のバージョンに戻れる機能を提供するのがundo-tree.elです。以下のようにgitをインストールして、undo-treeを入手してください。
undo-tree.elをロードパスの通った場所に配置したら、.emacsに以下の設定を追記します。
C-x uを入力することで、ツリー状に分岐した履歴が表示されますので、f/b/n/pでツリーを移動してください。移動するだけでバッファには、その時点での変更が反映されていますので、目的の場所へ移動できたらqキーでツリー表示を終了してください。
キルリングの内容を視覚化する browse-kill-ring
Emacsにはキルリングとよばれる、ユーザがキル(カット/削除)したテキストを保存しておく機能があります。これはその名の通りリング状のバッファで、クリップボードとは異なり、複数の履歴を保存しています。C-yで最後にキルした内容がヤンク(ペースト)されますが、その直後にM-yを入力すると、リングを順に辿りながら、古い内容をヤンクすることができます。しかしこれは「次に何が出てくるか」が見えないため、お世辞にも使いやすい機能とは言えません。
browse-kill-ringはキルリングの内容をリストとして表示し、カーソルでヤンクする内容を選択することができます。browse-kill-ringはemacs-goodies-elパッケージに同梱されています。
使うための特別な設定は必要ありません。M-x browse-kill-ringを実行すると、*Kill Ring*バッファにキルリングの内容がリストされますので、n/pで選択してEnterで決定してください。なお.emacsに以下のような記述を追加すると、M-yにbrowse-kill-ringをバインドすることができます。
賢い補完機能 Auto Complete Mode
Auto Complete Modeは、Visual Studioなどでおなじみのキーワード補完機能をEmacs上で実現します。Auto Complete Modeのサイトから最新のv1.2をダウンロードしてインストールしましょう。
アーカイブの展開が完了したら、Emacs上でM-x load-fileを実行します。ロードするファイル名はアーカイブを展開したディレクトリにある/etc/install.elです。次にインストール先を訪ねられますので、インストールしたいディレクトリを入力してください。ロードパスの通った、自分がいつも使用しているelisp置き場を指定するとよいでしょう。.emacsには以下のような設定を行います。ac-dictionary-directoriesはac-dictをインストールしたパスに置き換えてください。
あとはプログラムを入力していけば、その時々にあわせて補完候補を表示してくれます。補完候補を選択するにはTabキーを、選択した候補で確定するにはEnterを使用します。
grepの結果を直接編集する grep-edit
複数のファイルに対し、まとめて編集を行いたいということはよくあります。例えばクラス名を変えた時や、ある関数を別の関数に置き換えたい、といった時には、それらを参照している箇所を全て編集しなくてはなりません。編集する対象はgrepで探すことができますが、grep-editを使えばgrepで検索した結果を直接編集することができます。
grep-editはEmacs電子書棚さんからダウンロードできますので、ロードパスの通ったディレクトリに配置して、.emacsに以下の記述を追加してください。
M-x grepでgrepを実行すると、*grep*バッファにgrepの結果が表示されます。この*grep*バッファを編集してC-c C-eと入力すると、編集内容が各ファイルに反映されます(保存はされません)。*grep*バッファは、例えばM-x query-replaceなどを使って置換することも可能ですので、うまく使えば複数のファイルの内容をすばやく編集することが可能です。
Emacsから辞書を引く sdic
プログラムを書いていると、変数名の英単語に悩んだり、また英語のドキュメントを辞書片手に読まなければならないことも多々あります。そんな時に便利なのが、Emacs上から辞書を閲覧できるsdicです。p>
以下のコマンドを実行すると、sdicとsdicで使用できる英和/和英辞書がインストールされます。
Emacs上でM-x sdicを実行してミニバッファに調べたい単語を入力すると、*sdic*バッファに辞書を引いた結果を表示してくれます。
自動的に辞書引きする sdic-inline
sdicの機能を利用し、カーソルの下にある単語を自動調べてミニバッファに表示してくれる拡張が、sdic-inlineです。sdic-inlineはEmacs Wikiからダウンロードして、ロードパスの通ったディレクトリに配置してください。.emacsには以下のような記述を追記します。popupはポップアップ表示を行いたい場合に使用します。なおpopup.elは前述のAuto Complete Modeに同梱されていますので参考にしてください。
これでいちいちM-x sdicを実行しなくても、Emacsが自動的に単語を調べてくれます。
sdic-inlineをさらに拡張し、ミニバッファでなくtooltipを使って表示するのがsdic-inline-pos-tipです。pop-tip.elとsdic-inline-pos-tip.elをロードパスの通ったディレクトリに配置し、.emacsに以下の記述を追記します。これでtooltipで訳が表示されるようになります。
おわりに
EmacsにはUnixプログラマの知恵やノウハウが数十年にわたって蓄積されています。そのすべてを紹介することはとても不可能ですので、今回ははあくまで「ほんのさわり」だけを紹介しました。
もしEmacsに興味を持ち、もっと便利に使いたいと思ったら、さらにいろいろと調べてみましょう! もちろんSoftware Design誌の連載「Emacsトラノマキ」も参考になりますよ!