これらのコマンドはトップレベルの主要な定義、またはdefunsにもとづいてポイントを移動したり、リージョンをセットアップします。
カレントまたは直前のdefunの先頭に移動します(beginning-of-defun
)。
カレントまたは直後のdefunの最後に移動します(end-of-defun
)。
カレントまたは後続のdefun全体の周囲にリージョンを設定します(mark-defun
)。
カレントのdefunの先頭または最後に移動するコマンドは、C-M-a
(beginning-of-defun
)とC-M-e
(end-of-defun
)です。これらのコマンドの1つを繰り返すか、正の数引数を使用すると、繰り返しごとに動作方向の次のdefunに移動します。
C-M-aで負の引数−nを指定すると、次のdefunの開始へとn回移動します。これはC-M-eに引数nを与えたときに移動する位置と、正確に同じではありません。defunの終わりは通常、後続のdefunの開始と同じ位置ではないからです(空白文字、コメント、もしかしたら宣言がこれらのdefunを分割するからです)。同様にC-M-eに負の引数を与えると、defunの最後に後方に移動しますが、これはC-M-aに正の引数を与えた場合とは完全に異なる位置になります。
カレントのdefunを操作するには、C-M-h
(mark-defun
)を使用します。これはカレントのdefunの最後にマークをセットし、先頭にポイントを配します。テキストオブジェクトをマークするコマンドを参照してください。これは、そのdefunをkillしてファイルの他の場所に移動するための、一番簡単な準備方法です。defunの直前(間に空行を挟まない)にコメントがある場合は、そのコメントもマークされます。ポイントがdefunの間にある場合は、後続のdefunを使用します。マークがすでにアクティブのときにこのコマンドを使用すると、リージョンの最後が、複数のdefunを含むように拡張されます。プレフィクス引数を指定した場合は、その数のdefunをマークするか、適切な数のdefunになるようリージョンを拡張します。負のプレフィクス引数の場合は、反対方向のdefunをマークするとともに、以降のmark-defun
使用での選択方向も変更します。
Cモードでは、mark-defun
とほとんど同じなc-mark-function
を実行します。違いは、それが引数定義、関数名、リターンデータ型を含むことで、これによりC関数全体にリージョンが設定されます。これは標準のキーバインディングをメジャーモードが調整する方法の例です。これにより特定の言語によりふさわしい方法で標準的な作業を行うのです。この目的のために、他のメジャーモードは、これらのキーバインディングすべてを置き換えているかもしれません。
一部のプログラミング言語ではネストされたdefun(nested defuns:
入れ子関数)がサポートされています。これは他のdefunの内部(body、すなわち本体の一部として)で定義されたdefunのことです(defunとは関数、メソッド、クラスのような類い)。上述した関数はデフォルトではポイント近傍でもっとも内側のdefunの先頭か終端を探して見つけられます。tree-sitterライブラリーにもとづくメジャーモードでは、この挙動にたいする制御が提供されます。変数treesit-defun-tactic
の値にtop-level
がセットされていれば、defunコマンドは内側ではなくもっとも外側のdefunを探すようになります。