プログラミング言語のモードはそれぞれ、対応が取れた式(balanced expression)にたいする、独自の定義をもちます。対応が取れた式は通常、個別のシンボル、数字、文字列定数、同様にマッチする区切りで囲まれたコードの断片を含みます。以下のコマンドは対応が取れた式にたいするものです(Emacsでは、内部的にそのような式はsexpとして参照されます14)。
対応が取れた式を、前方に飛び越して移動します(forward-sexp
)。
対応が取れた式を、後方に飛び越して移動します(backward-sexp
)。
対応が取れた式を、前方にkillします(kill-sexp
)。
式を入れ替えます(transpose-sexps
)。
後続の式の後ろに、マークを配します(mark-sexp
)。
対応が取れた式を前方に飛び越して移動するには、C-M-f
(forward-sexp
)を使用します。ポイントの後ろの最初の文字が開始区切り(たとえばCでは‘(’、‘[’、‘{’)の場合、このコマンドはそれにマッチする終了区切りまで移動します。文字がシンボル、文字列、数字で始まる場合、このコマンドはそれらを飛び越して移動します。
コマンドC-M-b (backward-sexp
)は対応が取れた式を後方 — C-M-fと同様ですが逆向き
—
に飛び越して移動します。式の前にプレフィクス文字がある場合(Lispではシングルクォート、バッククォート、カンマ)、このコマンドはそれらも同様に飛び越して後方に移動します。
C-M-fおよびC-M-bに数引数を与えると、指定した回数繰り返し操作をします。負の引数を与えると、反対の方向に移動します。ほとんどのモードでは、これらの2つのコマンドはコメントをあたかも空白文字のように通過します。これらC-M-fおよびC-M-bのキーは、文字単位で移動するC-fおよびC-b(ポイント位置の変更を参照してください)、単語単位に移動するM-fおよびM-b(単語を参照してください)に類似していることに注意してください。
対応が取れた式全体をkillするには、C-M-k
(kill-sexp
)とタイプします。これはC-M-fが飛び越すテキストをkillします。
C-M-t
(transpose-sexps
)は、前にある対応の取れた式と、次の対応の取れた式の位置をスイッチします。このコマンドは、文字を入れ替えるC-tコマンド(テキストの入れ替えを参照してください)と類似しています。C-M-tへの引数は繰り返し回数を意味し、前の式を、何個か先の式に移動します。負の引数は前にある対応が取れた式を後方に、それらの式の前に移動します。引数0は何もしないのではなく、ポイントの位置で終わる対応が取れた式、またはポイントの後ろの式と、マークの後ろの式を入れ替えます。
リージョンにたいして動作するコマンドで対応が取れた式を操作するには、C-M-SPC
(mark-sexp
)とタイプします。これはC-M-fが移動する位置にマークをセットします。マークがアクティブの間、このコマンドを連続で呼び出すとマークが1つの式ごとにシフトしてリージョンが拡張します。正または負の引数はマークを前方または後方に指定した数の式分のマークを移動します。エイリアスC-M-@は、C-M-SPCと等価です。これに関連したコマンドは、テキストオブジェクトをマークするコマンドを参照してください。
Cのように挿入オペレーター(infix operators)を使用する言語では、与えられた位置で複数の可能な解釈があるので、すべての対応が取れた式を認識するのは不可能です。たとえば‘foo + bar’は1つのCの式ですが、Cモードはこれを1つの式とは扱いません。かわりに‘foo’を1つの式、‘bar’をもう1つの式、そしてそれらの間にある‘+’を句読点として認識します。しかしカッコがあればCモードは‘(foo + bar)’を1つの式として認識します。