Emacsでは,バッファの最上レベルにあるかっこで括られたグループをdefun
(デファン)と呼びます.この名称はLispファイルにおける最上レベルのリストが
ほとんどの場合,スペシャルフォームdefun
であることによります.しか
しEmacsでは,バッファの内容,あるいは使用しているプログラム言語に関わら
ず,最上レベルのかっこでくくられたグループはすべてdefunです.たとえばC言
語の関数定義の本体はdefunです.
beginning-of-defun
).
end-of-defun
.
mark-defun
).
ポイントのあるdefunの先頭,または最後にカーソルを動かすコマン
ドは,C-M-a (beginning-of-defun
)とC-M-e
(end-of-defun
です.
ポイントのあるdefunを操作するには,C-M-h (mark-defun
)コマ
ンドを使います.これはポイントのあるdefunまたは後ろのdefunの先頭にポイン
トを,最後にマークを置きます.たとえば,これを使えばdefunをテキストの他
の場所に移動する準備が簡単にできます.Cモードでは,C-M-hは関数
mark-c-function
が実行されます.これはほとんどmark-defun
と
同じですが,引数の宣言,関数名,関数の戻り値の型の宣言も含めてC関数全体
をリージョンに収めるところが違います.
Emacsでは左端の桁の開きかっこがdefunの始まりになります.従って, Lispファイルでは最上レベルのリストの始まりでない開きかっこを左マージ ンに置いてはいけません.またCでは,開きかっこ,またはその他の開き区切り は,関数の本体の始まりでないなら,行の最初に置いてはいけません.文字列 の中に現われる開き区切りを行の先頭に置く場合がありますが,このときはエス ケープ文字(C及びEmacs Lispでは`\',他のLisp言語では`/'など)を 開き区切りの前に置いて混乱を避けます.これなら文字列の内容にも影響があり ません.
かつてEmacsはかっこを1レベルずつさかのぼって最上位レベルのかっこを見つ けてdefunを探していました,しかしこの方法だと小さな関数を探すときでもバッ ファの先頭まで探しながら戻る必要があります.この時間を短縮するために, Emacsは,左マージンに置かれた`('(あるいは開き区切りを意味する他の文 字)をdefunの始まりとするように変えられました.このように変えてもほとんど 誤らないし,探索の手間はずっと少なくなりましたが,上に説明したような約束 が必要です.