Next: , Previous: Lisp Interaction, Up: Building


21.8 Emacs Lisp式の評価

Emacs内で動かすつもりのLispプログラムは、emacs-lispモードで編集しましょう。 ファイル名が.elで終っているファイルを編集すると、 自動的にこのモードになります。 一方、lispモードは、他のLispシステム向けのLispプログラムを編集する ためのモードです。 陽にemacs-lispモードに移るには、コマンドM-x emacs-lisp-modeを使います。

Emacs内で動くプログラムのテストには、 Emacsバッファにあるプログラムの一部を評価すると便利です。 たとえば、Lispの関数定義のテキストを変更してからその定義を評価すると、 それ以降にその関数を呼び出すと使われるようにインストールされます。 Lisp式を評価すると非対話的な(コマンドではない)関数を起動できるので、 どんな種類の編集作業にも便利です。

M-:
ミニバッファで1つのLisp式を読み取り、それを評価し、 その値をエコー領域に表示する (eval-expression)。
C-x C-e
ポイントの直前のLisp式を評価し、その値をエコー領域に表示する (eval-last-sexp)。
C-M-x
ポイントを含むか直後にある関数定義(defun)を評価し、 その値をエコー領域に表示する(eval-defun)。
M-x eval-region
リージョン内のすべてのLisp式を評価する。
M-x eval-current-buffer
バッファ内のすべてのLisp式を評価する。

M-:eval-expression)は、Lisp式を対話的に評価する もっとも基本的なコマンドです。 これは、ミニバッファで式を1つ読み取りますから、 バッファの内容に関係なくバッファ内でどんな式でも実行できます。 式が評価されたあとは、 M-:を打鍵したときのカレントバッファが、ふたたびカレントバッファになります。

emacs-lispモードでは、キーC-M-xはコマンドeval-defunにバインド されています。 このコマンドはポイントを含むか直後にある関数定義を Lisp式として解析し評価します。 その値はエコー領域に表示されます。 このコマンドは、関数定義のテキストの変更を Lisp環境に反映するのに便利です。

C-M-xdefvar式を特別扱いします。 通常、変数にすでに値が定義されている場合には、 defvar式を評価しても何もしません。 しかし、C-M-xは、defvar式で指定されている 初期値に変数の値を戻します。 この特別な機能は、Lispプログラムをデバッグするときに便利です。

コマンドC-x C-eeval-last-sexp)は、 ポイントのまえにあるLisp式を評価し その値をエコー領域に表示します。 このコマンドはemacs-lispモードだけでなく、 すべてのメジャーモードで使えます。 このコマンドは、defvarを特別扱いしません。

C-M-xC-x C-eM-:に数引数を指定すると、 値をエコー領域に表示するかわりにカレントバッファのポイント位置に挿入します。 引数の値は関係ありません。

バッファでLisp式を評価するもっとも一般的なコマンドはeval-regionです。 M-x eval-regionは、リージョン内の1つ以上のLisp式を解析して、 それらを1つずつ順に評価します。 M-x eval-current-bufferも同様ですが、バッファ全体を評価します。 これは、 テスト準備が整ったLispコードのファイルの内容を取り込むうまい方法です。 個々の関数のバグを発見して修正したら、 変更した関数それぞれにC-M-xを使います。 これによって、Lispの環境とソースファイルが一致します。