Emacs
Last Modified: Tue Dec 27 00:06:02 JST 2011

イントロダクション

はっきりいって、僕は Emacs は嫌いである。 だがこのマニュアルも含め、すべての日本語ドキュメントは Emacs (Mule) を使って書いている。 本当なら、日本語ドキュメントも vi で書きたいのだが、モード指向の vi では仮名漢字変換が大変わずらわしく、うまく使えないのが実情だ。 そこで日本語ドキュメントに限っては、Emacs を泣きながら使っているのである。

さて最近では vi を使って書くようにしている。 かな漢字変換は Windows IME だ。 ターミナルエミュレータの機能次第だが、Windows 環境に限れば問題はほとんどない。 ということで Emacs はインストールさえしていない状況である (2004年2月)。

とはいえ、Emacs は確かに優れたエディタだ。 Unix の世界では、エディタといえば Emacs であり、「vi なんて Emacs をインストールするときに仕方なく使うもんだよね」と言われるほど普及している。 Emacs の文化も広く普及しており、たとえばシェルの行内編集におけるキーバインドは Emacs 風ということも珍しくない。 vi 以外のエディタが使いたい、vi ではできない作業を行ないたいという場合は、Emacs がベストの選択と言える。

Emacs の基礎

Emacs はモードレスなエディタである。 すなわち、普通の人々が普段から慣れ親しんでいる「押した文字がそのまま入力されるタイプのエディタ」である。 だから基本的な使い方も至極簡単だ。 これからキーバインドの例を示すが、表記の意味は次の通りである。

C-a コントロールキーを押しながら`a'を押す
C-a C-b C-a を押した後、C-b を押す
C-a b C-a を押した後、コントロールキーを押さずに`b'を押す
M-x ESCキーを押し、続いて `x' を押す
M-x cmd M-x を押した後、`cmd' と入力する

注意して欲しいのは、「C-a C-b」と「C-a b」は違うキーバインドで、それぞれ別の意味を持つということだ。 正しいキーバインドをきちんと覚えてほしい。

Emacs でのカーソル移動は独特で、カーソルキーのようにキーの配置ではない。 vi のようなバインドはともかく、WordStar 系のダイアモンドカーソルとも異なっている。 このように文字が持つ意味に依存しているのは、キーボードが変われば使えなくなってしまう配置依存のバインドよりも優れているという考え方による。

また Emacs には 「カーソルは、文字ではなく、文字と文字の間をポイントしている」という独特の特徴がある。 このため Emacs では普通「I」の形をしたカーソルを使うことが推奨される (昔は珍しかったが、Windows では普通に見られるようになった)。 「I」カーソルを表示できない貧弱なグラフィック環境では、従来の「文字をポイントしているブロックカーソル」しか使えない場合が多いが、 Emacs では「ブロックカーソルの左側面」を真のカーソル位置とみなす。

さらに vi との違いとして、改行文字は普通の文字と同じくファイルを構成する要素(文字)のひとつにすぎないという点がある(多少例外はあるが)。 vi では、改行は行末を規定する特殊文字で、改行そのものを編集対象にすることはできない。 そのため vi では、改行のないファイルを作成することができない。 これは Unix におけるテキストファイルの定義に基づくものなのだが、 逆に Emacs では「うっかり改行のないファイル」を作ることが多く、 それが問題を引き起こすこともあるので注意が必要だ。

ジャンプとスクロール

カットとペースト

検索と置換

Emacs には mini-buffer と呼ばれる 1 行分の小さな編集画面が付いている。 mini-buffer は Windows でいうところのダイアログウィンドウに似た働きをする。 つまり、Emacs からユーザへのメッセージを表示したり、コマンド入力を受け付けたりといった役割を果たす。

ここで紹介する検索・置換コマンドも、mini-buffer を利用してユーザからの入力を受け付ける。

おまけ - Emacs Lisp

Emacs の真のすごさは、Emacs Lisp というマクロ言語にある。 Emacs のエディタとしての機能は、すべて Emacs Lisp で記述されている。 Emacs のコマンドキーは、これらの機能を呼び出すショートカットに過ぎない。 Emacs が持っている機能は非常に多種多様あるが、キーバインドされている機能は本当にごく一部だけだ。 多くの機能は、わざわざキーバインドするほどのものでもないものもある。 そうした機能は、「M-x 機能名」という形式で実行することができる (先ほど紹介した replace-string などがその例だ)。 もしこうした機能を頻繁に使うということなら、コマンドキーを割り当てることによってすぐに起動できるようにカスタマイズすることができる。

Emacs Lisp はユーザが自分で記述することもできる。 Emacs に、独自の機能をどんどん追加していくことができるのだ。 こうした Emacs の拡張性は大変高く、Emacs をエディタ以外のアプリケーションとして使えるようにしてしまえるほどだ。 たとえば Emacs を使ってメールを読み書きしたり、アプリケーションの開発環境を構築したりできてしまう。

Emacs Lisp の具体的な使い方は、ここで紹介し始めるとキリがないのでやめておく (そもそもそんなに詳しくないし…)。 その筋の書籍を当たってもらいたい。


[back to index]