Go to the first, previous, next, last section, table of contents.

リストとS式

リストを扱うEmacsのキーは通常,Control-Metaに割り当てるのが習慣 です.それらは対応するControl-Meta-のキーの機能に似た働き をします.これらのコマンドは,プログラム言語で使われる式を扱うように作ら れていますが,他の言語(英語でも)かっこが使われているなら,やはり便利に使 用できます.

コマンドは2つに分類されます.1つはリスト(かっこでまとめられたグループ) だけを扱います.それらは,かっこ類`()'`[]'`{}'(使っ ている言語でこれらはつねに対でなければなりません),及びかっこそのものを 表すのに使うエスケープ文字以外の文字は考慮しません.

もう1つのコマンドは式やS式を扱います.S式とは Symbol-Expressionの略でLispで式を意味する古い用語です.しかし, EmacsではS式の概念はLispに限定されてはいません.どんなプログラム言語にお いても1つのまとまった式をS式とします.どのプログラム言語もおのおのに主モー ドがあります.それは構文テーブルをカスタム化してその言語の式をS式とする ようにします.

典型的なS式として,シンボル,数,文字列,さらにかっこ類でくくられたも のがあります.

Cのように前置と中間置の両方の演算子を使う言語では,すべての式がS式にな るわけではありません.Cモードでは,`foo + bar'はCの式ですが,S式に はなりません.`foo'が1つのS式,`bar'は別のS式で,`+'はそ の間の句読点とみなされます.これは基本的な曖昧さです.`foo + var'`foo'では,`f'にポイントがあってS式1つ文先へ移動しようとすると き,どちらをS式としてもおかしくありません.Cモードでは,`(foo + bar)'はS式になることに注意してください.

いくつかの言語では式の構文にあいまいさがありますが,Emacsを使う上で困 ることはありません.

C-M-f
S式を1つ越えて先へ移動します(forward-sexp).
C-M-b
S式を1つ越えて逆方向へ移動します(backward-sexp).
C-M-k
右にあるS式を1つ削除します(kill-sexp).
C-M-u
リスト構造で1レベル上がってから,逆方向へ移動します (backward-up-list).
C-M-d
リスト構造で1レベル下がってから,順方向へ移動します(down-list).
C-M-n
リストを1つ越えて先へ移動します(forward-list).
C-M-p
リストを1つ越えて逆方向へ移動します(backward-list).
C-M-t
式を入れ換えます(transpose-sexp).
C-M-@
右の式の最後にマークをつけます(mark-sexp).

S式を1つ越えて先へ移動するには,C-M-f (forward-sexp)を使 います.ポイントの後ろの最初の考慮すべき文字が開始を表す 区切り文字(Lispでの`('や,Cでの`('`['`{')のと きは,C-M-fは対応する閉じ区切りの次へ移動します.文字がシンボル, 文字列,数などの開始文字なら,C-M-fは,それを越えて移動します.ポ イントの後ろの文字が閉じ区切りの場合,C-M-fは,それを越えるだけで す.(最後の場合は,実際はS式を越えたわけではありませんが,このように動く のが誰もが便利であると考えるので,例外としてC-M-fで定義されていま す.)

C-M-b (backward-sexp)コマンドは,S式を1つ越えて逆方向に移 動します.細かい動きはC-M-fに似ていますが方向が反対です.S式の前に, 接頭辞文字,(Lispではシングルクォート,バッククォート,コンマ)があると, C-M-bはそれも含めて逆方向に移動します.

引数のあるC-M-fC-M-bは指定した回数だけ動作を繰り返します. 負の引数では,反対方向に移動します.

Cのようにコメントの終りの指定がある言語では,S式コマンドはコメントを空 白と同様に移動時に無視します.Lispのようにコメントは行の終りまでとされて いる言語では,逆方向に解析してコメントを無視するのはかなり困難です.その ため,そういう言語では,S式コマンドはコメントのテキストをコードとみなし ます.

C-M-k (kill-sexp)を使って一度にS式を削除できます. C-M-kC-M-fで移動できる位置までの文字を削除します.

リストコマンドはS式コマンドのようにリスト上を移動しますが,他のS式(シ ンボル,文字列など)はスキップします.C-M-n (forward-list)と C-M-p (backward-list)がリストコマンドです.これらは通常,コ メントを無視するので便利です.(普通,コメントはリストを含んでいません.)

C-M-nC-M-pは,可能な限りかっこ内で同じレベルを保ちます. 1レベル(もしくはnレベル)に移動するには,C-M-u (backward-up-list)を使ってください.C-M-uは1レベル上の開始 区切りの前へ逆方向に移動します.正の引数は繰り返し回数になります.負の引 数では移動方向が逆になって,1レベル以上順方向と上方に移動します.

リスト構造でに移動するにはC-M-d (down-list)を使いま す.`('が唯一の開き区切りであるLispモードでは,これは`('の探索 とほとんど同じです.引数でリストを何レベル下げるかを指定します.

C-M-t (transpose-sexps)は,難しそうですが使いやすいコマン ドです.これは前のS式を次のS式の右へ移動します.引数は繰り返し回数となり ます.負の引数では後方に移動します.(これによって,正の引数をつけた C-M-tを取り消すことができます.)引数にゼロを与えると,ポイントとマー クのそれぞれ後ろで終っている2つのS式を入れ換えます.

ポイントの後ろのS式にリージョンを設定するには,C-M-@ (mark-sexp)を使います.これはC-M-fで移動するであろう位置に マークします.C-M-@の引数はC-M-fと同じ意味です.特に負の引 数は,前のS式の始めにマークするのに便利です.

リストとS式のコマンドの構文解析は,すべて構文テーブルに従います.たと えば,どの文字も開き区切りとして宣言できて,開きかっこと同じように振舞い ます.See section 構文テーブル.


Go to the first, previous, next, last section, table of contents.