以下は釣り合いの取れたカッコ式(balanced-parenthesis。これらの式を横断して移動することと関連してEmacsではsexp(S式)とも呼ばれる)と関係のあるいくつかの関数です。これらの関数がさまざまな文字を処理する方法は構文テーブル(syntax table)が制御します。構文テーブルを参照してください。sexpやその一部にたいする低レベルのプリミティブについては式のパースを参照してください。ユーザーレベルのコマンドについてはCommands for Editing with Parentheses in The GNU Emacs Manualを参照してください。
この関数は釣り合いの取れたカッコのグループをarg (デフォルトは1)グループ前方に移動する(単語やクォート文字のペアーでクォートされた文字列は無視される)。
この関数は釣り合いの取れたカッコのグループをarg (デフォルトは1)グループ後方に移動する(単語やクォート文字のペアーでクォートされた文字列は無視される)。
この関数はarg (デフォルトは1)の外側のカッコへ前方に移動する。負の引数では後方へ移動するが、それでもより浅いスポットへと移動する。
escape-stringsが非nil
(インタラクティブ時が該当)なら、取り囲まれた文字列の外側にも同様に移動する。no-syntax-crossingが非nil
(インタラクティブ時が該当)なら、複数の文字列を横断してリスト先頭に移動するかわりに、取り囲む文字列から脱け出すことを優先する。エラー時にはポイントの位置は未定義。
この関数はup-list
とど同様だが引数の正負が逆。
この関数はカッコをarg (デフォルトは1)レベル内側、前方に移動する。負の引数では後方に移動するが、それでも深いレベル(−argレベル)に移動する。
この関数は釣り合いの取れた式(balanced expressions)をarg (デフォルトは1)前方に移動する。釣り合いの取れた式にはカッコ等で区切られた式、および単語や文字列定数のようなものも含まれる。式のパースを参照のこと。たとえば、
---------- Buffer: foo ---------- (concat∗ "foo " (car x) y z) ---------- Buffer: foo ----------
(forward-sexp 3) ⇒ nil ---------- Buffer: foo ---------- (concat "foo " (car x) y∗ z) ---------- Buffer: foo ----------
forward-sexp
は変数forward-sexp-function
の値が非nil
なら、その関数を呼び出す。この関数にコマンドが呼び出されたときと同じ引数を渡して、実際の作業はこの関数が行う。メジャーモードはそのモードに相応しいように釣り合いのとれたカッコの移動を行うために、モード独自の関数を定義できる。
この関数は釣り合いの取れた式(balanced expressions)を、arg (デフォルトは1)後方に移動する。
この関数は後方にarg番目のdefunの先頭に移動する。argが負なら実際には前方に移動するが、defunの終端ではなく先頭に移動することは変わらない。argのデフォルトは1。
この関数は前方にarg番目のdefunの終端に移動する。argが負なら実際には後方に移動するが、defunの先頭ではなく終端に移動することは変わらない。argのデフォルトは1。
このバッファーローカル変数は非nil
ならdefunの始まりとなる開きカッコの前に出現し得るテキストを指定する正規表現を保持する。つまりこの正規表現にたいするマッチで始まり、その後に開きカッコ構文(open-parenthesis
syntax)が続くものがdefunである。
この変数の値が非nil
なら列0にある開きカッコはdefunの始まりとみなされる。nil
なら列0の開きカッコは特別な意味をもたない。デフォルトはt
。リテラル文字列の列0にカッコがあるような場合には偽陽性を回避するためにバックスラッシュでエスケープすること。
この変数は非nil
ならdefunの開始を見つける関数を保持する。関数beginning-of-defun
は通常の手法を使うかわりに、この関数に自身のオプション引数を渡して呼び出す。引数が非nil
なら、その関数はその回数分の関数呼び出しによってbeginning-of-defun
が行うように後方に移動すること。
この変数は非nil
ならdefunの終端を見つける関数を保持する。関数end-of-defun
は、通常の手法を使うかわりにその関数を呼び出す。
tree-sitterとともにEmacsがビルドされていれば、構文構造(syntax
construct)を横断して移動するためにtree-sitterのパーサー情報を使うことができます。正確に何がdefunとみなされるかは言語によってさまざまなので、それを判断するためにメジャーモードはtreesit-defun-type-regexp
をセットする必要があります。そうすればtreesit-beginning-of-defun
とtreesit-end-of-defun
を使うことによって、モードはdefun単位でのナビゲーション機能を労せず手に入れられるのです。
この変数はEmacsがどのノードをdefunとみなすかを決定する。defunノードのタイプにマッチするregexpを指定できる(“ノード”および “ノードタイプ”についてはプログラムソースの解析を参照)。
たとえばpython-mode
はこの変数に‘function_definition’か‘class_definition’のいずれかにマッチするregexpをセットする。
このregexpによってマッチしたノードすべてが有効なdefunという訳ではないときもある。したがってこの変数の値は(regexp . pred)という形式のコンスセルでもよい。ここでpredはノードを引数として受け取りそのノードが有効なdefunであれば非nil
、有効でなければnil
をリターンする関数であること。
この変数はEmacsがどのようにネスト(nest:
入れ子)されたdefunを扱うかを決定する。値がtop-level
なら、ナビゲーション関数はトップレベルのdefun間だけを移動、nested
ならナビゲーション関数はネストされたdefunを認識する。
変数forward-sentence-function
の値であるような関数が、センテンス(sentences:
文)と呼ばれる構文単位を横切って移動する方法を決定します。メジャーモードはforward-sentence
コマンドの挙動をカスタマイズするために、この変数に独自の関数を割り当てることができます。tree-sitterとともにEmacsがビルドされていれば、構文構造(syntax
construct)を横断して移動するためにtree-sitterのパーサー情報を使うことができます。正確に何がdefunとみなされるかは言語によってさまざまなので、それを判断するためにメジャーモードはtreesit-thing-settings
をセットする必要があります。そしてforward-sentence-function
にtreesit-forward-sentence
がセットされれば、そのモードはforward-sentence
とbackward-sentence
(Moving by Sentences in The extensible self-documenting text
editorを参照)を使えば労せずしてセンテンス単位のナビゲーション機能を手中にできるのです。
tree-sitterとともにEmacsがビルドされていれば、構文構造(syntax
construct)を横断して移動するためにtree-sitterのパーサー情報を使うことができます。正確に何がdefunとみなされるかは言語によってさまざまなので、それを判断するためにメジャーモードはtreesit-thing-settings
(Expressions in The extensible self-documenting text
editorを参照)をセットする必要があります。そしてforward-sexp-function
にtreesit-forward-sexp
をセットすれば、backward-sexp
とforward-sexp
を使うことによって、モードはdefun単位でのナビゲーション機能を労せず手に入れられるのです。