GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Defuns.html ・ emacs-doc.conao3.com

28.2.2 Defunsによる移動

これらのコマンドは、defunsとも呼ばれるトップレベルの主要定義に基づいて、ポイントを移動させたり領域を設定したりします。

C-M-a

現在または直前の defun (beginning-of-defun) の先頭に移動する。

C-M-e

現在または次の defun (end-of-defun) の末尾に移動する。

C-M-h

現在の全体、または後続の defun (mark-defun) をリージョンで囲む。

現在のdefunの先頭および末尾へ移動するコマンドは、C-M-a (beginning-of-defun) および C-M-e (end-of-defun) です。これらのコマンドのいずれかを繰り返し実行するか、正の数値引数を指定すると、繰り返すたびに移動方向に沿って次のdefunへ移動します。

負の引数を持つ C-M-a −n は、defun の次の先頭まで n 回分前方に移動します。これは、引数 n を持つ C-M-e が移動する位置と完全に一致するわけではありません。通常、この defun の末尾は、後続する defun の先頭と完全に一致するわけではないためです。(空白、コメント、そしておそらく宣言が両者を隔てることがあります。)同様に、負の引数を持つ C-M-e は defun の末尾まで後方に移動しますが、これは正の引数を持つ C-M-a とは完全には一致しません。

現在のデファンに対して操作を行うには、C-M-h (mark-defun) を使用します。これにより、現在のデファンの末尾にマークが設定され、ポイントがその先頭に配置されます。テキストオブジェクトをマークするコマンドを参照してください。これは、デファンをファイル内の別の場所に移動させるために、デファンをキルする準備を整える最も簡単な方法です。デファンの直前にコメントがある場合(間に空行がない場合)、それらもマークされます。ポイントがデファンの間にあるときにこのコマンドを使用すると、次のデファンが対象となります。マークが既に有効な状態でこのコマンドを使用すると、リージョンの末尾が拡張され、さらに1つのデファンが含まれます。接頭辞引数を指定すると、その数だけデファンをマークするか、または適切な数だけデファン分リージョンを拡張します。負の接頭辞引数を指定すると、逆方向のデファンをマークし、その後の mark-defun 使用時の選択方向も変更します。

Cモードでは、C-M-h は mark-defun とほぼ同様の関数 c-mark-function を実行します。相違点は、引数の宣言、関数名、および戻り値のデータ型をまたいで後方に伸びるため、C関数全体がリージョン内に収まる点です。これは、メジャーモードが標準的なキーバインドを調整し、特定の言語により適した形で標準的な動作を実現させる一例です。他のメジャーモードでも、同様の目的でこれらのキーバインドの一部または全部を置き換える場合があります。

一部のプログラミング言語ではネストされたdefunがサポートされており、これによりdefun(関数、メソッド、クラスなど)を別のdefunの内部(すなわち本体の一部として)で定義することができます。前述のコマンドは、デフォルトではポイント周辺の最内層のdefunの開始位置と終了位置を検出します。Tree-sitterライブラリをベースとしたメジャーモードでは、この動作を制御できます。デフォルトではtreesit-defun-tacticの値がnestedに設定されており、これがtop-levelに設定されている場合、defunコマンドは代わりに最外層のdefunを検出します。値がparent-firstに設定されている場合、defunコマンドはポイント周辺の前後のdefunへ移動するのではなく、常に現在の包含defunから外へ出ようとします。包含defunが存在しない場合は、前後のdefunへ移動します。