Ubuntu Weekly Recipe

第118回UbuntuとEmacsでプログラミングをはじめよう(後編)

今週はEmacsでのプログラミング環境のまとめとして、Emacsでの編集作業に役立つ便利な拡張機能を紹介します。

分岐したアンドゥの履歴を管理する undo-tree

エディタにおいてアンドゥ、リドゥはとても便利な機能ですが、アンドゥした後に新しい入力を行うと、リドゥができないというジレンマがあります。以下のようなケースを想定してみてください。

  1. Aを入力する
  2. Aの入力をアンドゥ
  3. Bを入力する
  4. やっぱりAに戻したい <- これはできない

このような、ツリー状に分岐する入力の履歴を管理し、任意のバージョンに戻れる機能を提供するのがundo-tree.elです。以下のようにgitをインストールして、undo-treeを入手してください。

$ sudo apt-get install git-core
$ git clone http://www.dr-qubit.org/git/undo-tree.git undo-tree

undo-tree.elをロードパスの通った場所に配置したら、.emacsに以下の設定を追記します。

(when (require 'undo-tree nil t)
  (global-undo-tree-mode))

C-x uを入力することで、ツリー状に分岐した履歴が表示されますので、f/b/n/pでツリーを移動してください。移動するだけでバッファには、その時点での変更が反映されていますので、目的の場所へ移動できたらqキーでツリー表示を終了してください。

図1 視覚的に履歴が表示され、任意の状態に戻ることができる
図1 視覚的に履歴が表示され、任意の状態に戻ることができる

キルリングの内容を視覚化する browse-kill-ring

Emacsにはキルリングとよばれる、ユーザがキル(カット/削除)したテキストを保存しておく機能があります。これはその名の通りリング状のバッファで、クリップボードとは異なり、複数の履歴を保存しています。C-yで最後にキルした内容がヤンク(ペースト)されますが、その直後にM-yを入力すると、リングを順に辿りながら、古い内容をヤンクすることができます。しかしこれは「次に何が出てくるか」が見えないため、お世辞にも使いやすい機能とは言えません。

browse-kill-ringはキルリングの内容をリストとして表示し、カーソルでヤンクする内容を選択することができます。browse-kill-ringはemacs-goodies-elパッケージに同梱されています。

$ sudo apt-get install emacs-goodies-el

使うための特別な設定は必要ありません。M-x browse-kill-ringを実行すると、*Kill Ring*バッファにキルリングの内容がリストされますので、n/pで選択してEnterで決定してください。なお.emacsに以下のような記述を追加すると、M-yにbrowse-kill-ringをバインドすることができます。

(browse-kill-ring-default-keybindings)

賢い補完機能 Auto Complete Mode

Auto Complete Modeは、Visual Studioなどでおなじみのキーワード補完機能をEmacs上で実現します。Auto Complete Modeのサイトから最新のv1.2をダウンロードしてインストールしましょう。

$ wget http://cx4a.org/pub/auto-complete/auto-complete-1.2.tar.bz2
$ tar jxvf auto-complete-1.2.tar.bz2

アーカイブの展開が完了したら、Emacs上でM-x load-fileを実行します。ロードするファイル名はアーカイブを展開したディレクトリにある/etc/install.elです。次にインストール先を訪ねられますので、インストールしたいディレクトリを入力してください。ロードパスの通った、自分がいつも使用しているelisp置き場を指定するとよいでしょう。.emacsには以下のような設定を行います。ac-dictionary-directoriesはac-dictをインストールしたパスに置き換えてください。

(when (require 'auto-complete-config nil t)
  (add-to-list 'ac-dictionary-directories "~/.emacs.d/elisp//ac-dict")
  (ac-config-default))

あとはプログラムを入力していけば、その時々にあわせて補完候補を表示してくれます。補完候補を選択するにはTabキーを、選択した候補で確定するにはEnterを使用します。

図2 現在の文脈を判断して、補完候補を表示してくれる
図2 現在の文脈を判断して、補完候補を表示してくれる

grepの結果を直接編集する grep-edit

複数のファイルに対し、まとめて編集を行いたいということはよくあります。例えばクラス名を変えた時や、ある関数を別の関数に置き換えたい、といった時には、それらを参照している箇所を全て編集しなくてはなりません。編集する対象はgrepで探すことができますが、grep-editを使えばgrepで検索した結果を直接編集することができます。

grep-editはEmacs電子書棚さんからダウンロードできますので、ロードパスの通ったディレクトリに配置して、.emacsに以下の記述を追加してください。

(require 'grep-edit nil t)

M-x grepでgrepを実行すると、*grep*バッファにgrepの結果が表示されます。この*grep*バッファを編集してC-c C-eと入力すると、編集内容が各ファイルに反映されます(保存はされません⁠⁠。*grep*バッファは、例えばM-x query-replaceなどを使って置換することも可能ですので、うまく使えば複数のファイルの内容をすばやく編集することが可能です。

図3 grepした結果を、query-replaceで置換
図3 grepした結果を、query-replaceで置換

Emacsから辞書を引く sdic

プログラムを書いていると、変数名の英単語に悩んだり、また英語のドキュメントを辞書片手に読まなければならないことも多々あります。そんな時に便利なのが、Emacs上から辞書を閲覧できるsdicです。p>

以下のコマンドを実行すると、sdicとsdicで使用できる英和/和英辞書がインストールされます。

$ sudo apt-get install sdic sdic-edict sdic-gene95

Emacs上でM-x sdicを実行してミニバッファに調べたい単語を入力すると、*sdic*バッファに辞書を引いた結果を表示してくれます。

図4 単語を英和辞典で調べてみた
図4 単語を英和辞典で調べてみた

自動的に辞書引きする sdic-inline

sdicの機能を利用し、カーソルの下にある単語を自動調べてミニバッファに表示してくれる拡張が、sdic-inlineです。sdic-inlineはEmacs Wikiからダウンロードして、ロードパスの通ったディレクトリに配置してください。.emacsには以下のような記述を追記します。popupはポップアップ表示を行いたい場合に使用します。なおpopup.elは前述のAuto Complete Modeに同梱されていますので参考にしてください。

これでいちいちM-x sdicを実行しなくても、Emacsが自動的に単語を調べてくれます。

(when (require 'sdic-inline)
  (require 'popup nil t)
  (sdic-inline-mode t)
  (add-to-list 'sdic-inline-enable-modes 'w3m-mode)
  (define-key sdic-inline-map "\C-c\C-p" 'nil)
  (setq sdic-inline-eiwa-dictionary "/usr/share/dict/gene.sdic")
  (setq sdic-inline-waei-dictionary "/usr/share/dict/jedict.sdic"))

sdic-inlineをさらに拡張し、ミニバッファでなくtooltipを使って表示するのがsdic-inline-pos-tipです。pop-tip.elsdic-inline-pos-tip.elをロードパスの通ったディレクトリに配置し、.emacsに以下の記述を追記します。これでtooltipで訳が表示されるようになります。

(when (require 'sdic-inline-pos-tip nil t)
  (setq sdic-inline-search-func 'sdic-inline-search-word-with-stem)
  (setq sdic-inline-display-func 'sdic-inline-pos-tip-show))
  (define-key sdic-inline-map "\C-c\C-p" 'sdic-inline-pos-tip-show))
図5 tooltipで訳が表示されるようになる
図5 tooltipで訳が表示されるようになる

おわりに

EmacsにはUnixプログラマの知恵やノウハウが数十年にわたって蓄積されています。そのすべてを紹介することはとても不可能ですので、今回ははあくまで「ほんのさわり」だけを紹介しました。

もしEmacsに興味を持ち、もっと便利に使いたいと思ったら、さらにいろいろと調べてみましょう! もちろんSoftware Design誌の連載「Emacsトラノマキ」も参考になりますよ!

おすすめ記事

記事・ニュース一覧