Next: , Previous: , Up: モーション   [Contents][Index]


31.2.6 バランスのとれたカッコを越えた移動

以下は釣り合いの取れたカッコ式(balanced-parenthesis。これらの式を横断して移動することと関連してEmacsではsexp(S式)とも呼ばれる)と関係のあるいくつかの関数です。これらの関数がさまざまな文字を処理する方法は構文テーブル(syntax table)が制御します。構文テーブルを参照してください。sexpやその一部にたいする低レベルのプリミティブについては式のパースを参照してください。ユーザーレベルのコマンドについてはCommands for Editing with Parentheses in The GNU Emacs Manualを参照してください。

Command: forward-list &optional arg

この関数は釣り合いの取れたカッコのグループをarg (デフォルトは1)グループ前方に移動する(単語やクォート文字のペアーでクォートされた文字列は無視される)。

Command: backward-list &optional arg

この関数は釣り合いの取れたカッコのグループをarg (デフォルトは1)グループ後方に移動する(単語やクォート文字のペアーでクォートされた文字列は無視される)。

Command: up-list &optional arg escape-strings no-syntax-crossing

この関数はarg (デフォルトは1)の外側のカッコへ前方に移動する。負の引数では後方へ移動するが、それでもより浅いスポットへと移動する。 escape-stringsが非nil (インタラクティブ時が該当)なら、取り囲まれた文字列の外側にも同様に移動する。no-syntax-crossingが非nil (インタラクティブ時が該当)なら、複数の文字列を横断してリスト先頭に移動するかわりに、取り囲む文字列から脱け出すことを優先する。エラー時にはポイントの位置は未定義。

Command: backward-up-list &optional arg escape-strings no-syntax-crossing

この関数はup-listとど同様だが引数の正負が逆。

Command: down-list &optional arg

この関数はカッコをarg (デフォルトは1)レベル内側、前方に移動する。負の引数では後方に移動するが、それでも深いレベル(-argレベル)に移動する。

Command: forward-sexp &optional 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なら、その関数を呼び出す。この関数にコマンドが呼び出されたときと同じ引数を渡して、実際の作業はこの関数が行う。メジャーモードはそのモードに相応しいように釣り合いのとれたカッコの移動を行うために、モード独自の関数を定義できる。

Command: backward-sexp &optional arg

この関数は釣り合いの取れた式(balanced expressions)を、arg (デフォルトは1)後方に移動する。

Command: beginning-of-defun &optional arg

この関数は後方にarg番目のdefunの先頭に移動する。argが負なら実際には前方に移動するが、defunの終端ではなく先頭に移動することは変わらない。argのデフォルトは1。

Command: end-of-defun &optional arg

この関数は前方にarg番目のdefunの終端に移動する。argが負なら実際には後方に移動するが、defunの先頭ではなく終端に移動することは変わらない。argのデフォルトは1。

User Option: defun-prompt-regexp

このバッファーローカル変数は非nilならdefunの始まりとなる開きカッコの前に出現し得るテキストを指定する正規表現を保持する。つまりこの正規表現にたいするマッチで始まり、その後に開きカッコ構文(open-parenthesis syntax)が続くものがdefunである。

User Option: open-paren-in-column-0-is-defun-start

この変数の値が非nilなら列0にある開きカッコはdefunの始まりとみなされる。nilなら列0の開きカッコは特別な意味をもたない。デフォルトはt。リテラル文字列の列0にカッコがあるような場合には偽陽性を回避するためにバックスラッシュでエスケープすること。

Variable: beginning-of-defun-function

この変数は非nilならdefunの開始を見つける関数を保持する。関数beginning-of-defunは通常の手法を使うかわりに、この関数に自身のオプション引数を渡して呼び出す。引数が非nilなら、その関数はその回数分の関数呼び出しによってbeginning-of-defunが行うように後方に移動すること。

Variable: end-of-defun-function

この変数は非nilならdefunの終端を見つける関数を保持する。関数end-of-defunは、通常の手法を使うかわりにその関数を呼び出す。

tree-sitterとともにEmacsがビルドされていれば、構文構造(syntax construct)を横断して移動するためにtree-sitterのパーサー情報を使うことができます。正確に何がdefunとみなされるかは言語によってさまざまなので、それを判断するためにメジャーモードはtreesit-defun-type-regexpをセットする必要があります。そうすればtreesit-beginning-of-defuntreesit-end-of-defunを使うことによって、モードはdefun単位でのナビゲーション機能を労せず手に入れられるのです。

Variable: treesit-defun-type-regexp

この変数はEmacsがどのノードをdefunとみなすかを決定する。defunノードのタイプにマッチするregexpを指定できる(“ノード”および “ノードタイプ”についてはプログラムソースの解析を参照)。

たとえばpython-modeはこの変数に‘function_definition’か‘class_definition’のいずれかにマッチするregexpをセットする。

このregexpによってマッチしたノードすべてが有効なdefunという訳ではないときもある。したがってこの変数の値は(regexp . pred)という形式のコンスセルでもよい。ここでpredはノードを引数として受け取りそのノードが有効なdefunであれば非nil、有効でなければnilをリターンする関数であること。

Variable: treesit-defun-tactic

この変数は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-functiontreesit-forward-sentenceがセットされれば、そのモードはforward-sentencebackward-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-functiontreesit-forward-sexpをセットすれば、backward-sexpforward-sexpを使うことによって、モードはdefun単位でのナビゲーション機能を労せず手に入れられるのです。


Next: 文字のスキップ, Previous: スクリーン行単位の移動, Up: モーション   [Contents][Index]

This page has generated for branch:emacs-30, commit:ab5505a8acf795c0a0a2745dd6fb666954c6a4bb to check Japanese translation.