UNIXだけに限らず、いろいろな OS で Emacs が広く使われている原因は、その拡張性の広さにあ ります。Emacs の編集機能の多くは、Emacs-Lisp という名前のプログラミング 言語によって実現されています。文字の入力、カーソルの移動、文字列の置換、 といった編集操作は、すべて、対応する Lisp関数を呼び出すことによって行な われます。本稿では、この Lisp関数を呼び出す操作を Emacsコマンド と 呼ぶことにします。具体的に見てみましょう。
前節で、カーソルの前方移動は C-f と説明しました。このカーソル移動は、 forward-char という Emacsコマンドに対応しています。任意の Emacsコマンド を実行するには、M-x(ESCキーのあとに xキーを押す)のあとに、Emacsコマン ドを入力します。Emacs を立ち上げて、M-x forward-char と入力してみましょ う(入力の途中では、ウィンドウの1番下のエコー領域に、M-x for.... と表示 されます)。リターンキーを押すと、カーソルがひとつ右に移動し、エコー領域 に、「You can run the command 'forward-char' with C-f」と表示されます (次に他の操作をすると、すぐに消えてしまいますので、注意して見ていて下さ い)。カーソルの前方移動が forward-char という Emacsコマンドで行なわれて いることが確かめられました。このように、すべての操作は Emacsコマンドを呼 び出すことで行なわれるのですが、単にカーソルを移動させるのに、一々、 Emacsコマンドを呼び出していては効率が悪すぎます。そこで、Emacs自身が教え てくれたように、forward-char という Emacs コマンドは、C-f というキーで呼 び出すことができるようにしてあるのです。これを、「キーに Emacsコマンド (Lisp関数)を結び付ける」という意味で、キーバインディング (key binding)と呼びます。良く使う Emacsコマンドは、ほとんどキーバインディング されています。
Emacsコマンドとキーバインディングの関係を説明しましたが、ここに Emacsの 拡張性の広さの鍵があります。Emacsコマンドの実体は、プログラミング言語の Lisp関数です。ある操作を Lisp 言語で書くと、それを Emacs に実行させるこ とができ、また、任意のキーバインディングをすることができます。この機能を 利用して、プログラムのソースファイルを編集する時に最適な環境やキーバイン ディング、電子メールを書く場合に最適な環境とキーバインディング、というよ うに、目的によってその環境を変えたり新たな機能を追加して行くことができる ようになっているのです。このように、その目的に最も適した環境を、Emacs で は モード(mode) と呼びます。テキストを編集する Textモード、プロ グラムのソースファイルを編集する Cモードや perlモード、javaモード、TeXの 文書を作成する TEXモードや 野鳥モードなど、多彩なモードがあり、多くの 場合、そのファイルの種類を自動認識して、自動的にモードを変更します 90。また、各モードでキーバインディングも少しずつ違います。ただし、 この章で説明するカーソル移動や文字列の検索・置換、ファイルの保存や読み込 みなどのような基本的な機能のキーバインディングは、すべてのモードで共通で す。
キーバインディングは、自分の好みで変えられます。自分だけの Emacs の設定
は、ホームディレクトリの .emacs.el というファイルに記述します。このファ
イルは、Emacs が起動する時に自動的に読み込む設定ファイルですが、このファ
イル自体が、Emacs-Lisp言語で書かれています。
練習
6
Emacs には、初心者が自分で使い方の練習ができるような、チュートリアル (tutorial)が内蔵されています。チュートリアルは、Emacsコマンドで、 help-with-tutorial です。Emacs を立ち上げたあと、M-x help-with-tutorial として、現れた画面で練習してみましょう91。