次: , 前: Lists, 上: Programs


20.3 リストとS式に対するコマンド

C-M-f
S式を横断して前向きに移動する(forward-sexp)。
C-M-b
S式を横断して後向きに移動する(backward-sexp)。
C-M-k
前向きにS式をキルする(kill-sexp)。
C-M-<DEL>
後向きにS式をキルする(backward-kill-sexp)。
C-M-u
リスト構造を1レベル上がって後向きに移動する(backward-up-list)。
C-M-d
リスト構造を1レベル下がって前向きに移動する(down-list)。
C-M-n
リストを横断して前向きに移動する(forward-list)。
C-M-p
リストを横断して後向きに移動する(backward-list)。
C-M-t
式を入れ替える(transpose-sexps)。
C-M-@
つぎの式の直後にマークを設定する(mark-sexp)。

S式を横断して前向きに移動するには、 C-M-fforward-sexp)を使います。 ポイントに続く最初の意味ある文字が開き区切り (Lisp では`('、Cでは`('や`['や`{')であれば、 対応する閉じ区切りのうしろに移動します。 シンボル、文字列、数値を始める文字の場合には、 それらを横断してその末尾に移動します。

コマンドC-M-bbackward-sexp)は、 S式を横断して後向きに移動します。 移動の詳しい規則は上記のC-M-fと同様ですが、方向は逆です。 S式のまえに接頭辞文字(Lispではシングルクォート、バッククォート、コンマ)が ある場合には、それらも横断します。 ほとんどのモードでは、S式コマンドはコメントを空白であるかのように 飛び越えます。

C-M-fC-M-bに引数を指定すると、 指定された回数だけ動作を繰り返します。 負の引数では、逆向きに移動します。

1つのS式全体をキルするには、C-M-kkill-sexp)や C-M-<DEL>backward-kill-sexp)で行います。 C-M-kC-M-fで横断するだけの文字をキルし、 C-M-<DEL>C-M-bで横断するだけの文字をキルします。

S式コマンドと同様に、リストコマンドはリストを横断しますが、 リスト以外のS式(シンボルや文字列など)は飛び越します。 これらのコマンドは、C-M-nforward-list)と C-M-pbackward-list)です。 これらのコマンドが便利である主な理由は、 (コメントにはリストが何も含まれないのが普通なので) コメントを無視するからです。

C-M-nC-M-pは、可能な限り同じレベルの括弧にとどまります。 1つ(あるいはnだけ)上のレベルに移動するには、 C-M-ubackward-up-list)を使います。 C-M-uは、対応の取れていない開き区切りのまえへ後向きに移動して、 1つレベルを上げます。 正の引数は反復回数になります。 負の引数は、移動を逆向きにしますが、やはり反復回数です。 つまり、前向きに移動して、1つ以上レベルを上げます。

リスト構造中でのレベルに移動するには、 C-M-ddown-list)を使います。 Lispモードでは、`('が唯一の開き区切りなので、 このコマンドは`('を探索するのとほとんど同じです。 引数は下がるべき括弧のレベルを指定します。

本当は役に立つのに、何の役に立つのだろうと思われるコマンドが C-M-ttranspose-sexps)です。 これはポイントのまえにあるS式を、つぎにあるS式を越えて移動するコマンドです。 引数は反復回数となり、負の引数では後向きにS式を移動します (つまり正の引数を指定したC-M-tの効果を打ち消せる)。 引数が0の場合は、何もしないのではなくて、 ポイントのあとにあるS式とマークのあとにあるS式を入れ替えます。

バッファ内でつぎにあるS式の周りにリージョンを設定するには、 C-M-@mark-sexp)を使います。 このコマンドは、C-M-fによる移動先にマークを設定します。 C-M-@は、C-M-fと同様に引数を取ります。 とりわけ、負の引数は、直前のS式の先頭にマークを設定するのに便利です。

リストおよびS式コマンドが行う構文の解釈は、 構文テーブルに完全に支配されます。 たとえば、任意の文字を開き区切りとして宣言できて、 そうすると開き括弧のようにふるまうようになります。 See Syntax