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 ----------
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を指定できる(“ノード”および “ノードタイプ”についてはParsing Program Sourceを参照)。

たとえば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を認識する。

If Emacs is compiled with tree-sitter, it can use the tree-sitter parser information to move across syntax constructs. Since what exactly is considered a sentence varies between languages, a major mode should set treesit-thing-settings to determine that. Then the mode can get navigation-by-sentence functionality for free, by using forward-sentence and backward-sentence(see Moving by Sentences in The extensible self-documenting text editor).

If Emacs is compiled with tree-sitter, it can use the tree-sitter parser information to move across syntax constructs. Since what exactly is considered a sexp varies between languages, a major mode should set treesit-thing-settings to determine that. Then the mode can get navigation-by-sexp functionality for free, by using forward-sexp and backward-sexp(see Expressions in The extensible self-documenting text editor).


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

This page has generated for branch:work/master_4078d0fd3ee9e55c3da219aa6e7788ac6130697b, commit:f4aecf7b5d81147c2921bb1abce760aa51ea8dbc to check Japanese translation.