各プログラミング言語モードには、バランス式に関する独自の定義があります。バランス式には通常、個々の記号、数値、文字列定数のほか、対応する一対のデリミタで囲まれたコード部分が含まれます。以下のコマンドはバランス式を扱います(Emacsでは、こうした式は内部的にsexpsと呼ばれます16)。
バランスの取れた式 (forward-sexp) をまたいで前進する。
バランスの取れた式 (backward-sexp) を遡る。
バランスの取れた式を前方に展開する (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(単語 を参照)に対応しています。
バランス式全体を消去するには、C-M-k (kill-sexp) と入力します。これにより、C-M-f
が移動する先のテキストが消去されます。
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言語のように中置演算子を用いる言語では、ある位置において複数の解釈が可能となるため、すべてのバランスの取れた式を認識することはできません。例えば、Cモードでは ‘foo + bar’ を単一の式として扱いませんが、これはC言語の式ではあっても、代わりに ‘foo’ を一つの式、‘bar’ を別の式として認識し、その間の ‘+’ を句読点として扱います。しかし、Cモードでは括弧があるため、‘(foo + bar)’ を単一の式として認識します。