リストを扱う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を使う上で困 ることはありません.
forward-sexp
).
backward-sexp
).
kill-sexp
).
backward-up-list
).
down-list
).
forward-list
).
backward-list
).
transpose-sexp
).
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-fやC-M-bは指定した回数だけ動作を繰り返します. 負の引数では,反対方向に移動します.
Cのようにコメントの終りの指定がある言語では,S式コマンドはコメントを空 白と同様に移動時に無視します.Lispのようにコメントは行の終りまでとされて いる言語では,逆方向に解析してコメントを無視するのはかなり困難です.その ため,そういう言語では,S式コマンドはコメントのテキストをコードとみなし ます.
C-M-k (kill-sexp
)を使って一度にS式を削除できます.
C-M-kはC-M-fで移動できる位置までの文字を削除します.
リストコマンドはS式コマンドのようにリスト上を移動しますが,他のS式(シ
ンボル,文字列など)はスキップします.C-M-n (forward-list
)と
C-M-p (backward-list
)がリストコマンドです.これらは通常,コ
メントを無視するので便利です.(普通,コメントはリストを含んでいません.)
C-M-nとC-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 構文テーブル.