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

19.3 キーボードマクロカウンター

各キーボードマクロには対応するカウンタがあり、マクロの定義を開始する際に0に初期化されます。この現在のカウンタを使用すると、マクロが呼び出された回数に応じた数値をバッファに挿入できます。通常、カウンタの値がバッファに挿入されるたびにインクリメントされます。

現在のカウンタに加えて、キーボードマクロは前回のカウンタも保持しており、ここには現在のカウンタが最後にインクリメントまたは設定された際の値が記録されます。なお、C-u 0 C-x C-k C-i などで現在のカウンタを 0 加算した場合も、現在のカウンタの値が前回のカウンタ値として記録される点に注意してください。

F3

キーボードマクロの定義において、キーボードマクロカウンタの値をバッファに挿入します (kmacro-start-macro-or-insert-counter)。

C-x C-k C-i

キーボードマクロカウンタの値をバッファに挿入します (kmacro-insert-counter)。

C-x C-k C-c

キーボードマクロカウンターを設定します (kmacro-set-counter)。

C-x C-k C-a

プレフィックス引数をキーボードマクロカウンタ (kmacro-add-counter) に追加します。

C-x C-k C-f

キーボードマクロカウンタ (kmacro-set-format) を挿入する際の形式を指定します。

キーボードマクロを定義する際、コマンド F3 (kmacro-start-macro-or-insert-counter) は、キーボードマクロのカウンタの現在の値をバッファに挿入し、カウンタを1インクリメントします。(マクロを定義していない場合は、F3 によって代わりにマクロ定義が開始されます。基本的な使い方を参照してください。)数値のプレフィックス引数を使用して、別のインクリメント値を指定できます。単に C-u プレフィックスを指定した場合は、直前のカウンタ値が挿入され、現在の値は変更されません。

例として、キーボードマクロカウンターを使って番号付きリストを作成する方法をご紹介します。以下のキー操作を考えてみましょう。

F3 C-a F3 . SPC F4

このキーボードマクロ定義の一環として、現在の行の先頭に文字列 ‘0. ’ が挿入されました。ここでバッファ内の別の場所に移動し、F4 と入力してマクロを呼び出すと、その行の先頭に文字列 ‘1. ’ が挿入されます。それ以降の呼び出しでは、‘2. ’、‘3. ’ といった順に挿入されます。

コマンド C-x C-k C-i (kmacro-insert-counter) は F3 と同様の動作をしますが、キーボードマクロの定義外で使用できます。キーボードマクロが定義または実行されていないときは、キーボードマクロリングの先頭にマクロを挿入し、そのカウンタをインクリメントします。

コマンド C-x C-k C-c (kmacro-set-counter) は、現在のマクロカウンタを数値引数の値に設定します。マクロ内でこのコマンドを使用すると、マクロの繰り返しごとに処理が行われます。接頭辞として C-u のみを指定した場合、マクロの実行中にカウンタが現在の繰り返しの開始時の値にリセットされます(これにより、その繰り返しにおけるそれまでの増分が取り消されます)。

コマンド C-x C-k C-a (kmacro-add-counter) は、現在のマクロカウンタにプレフィックス引数を加算します。引数に C-u のみを指定した場合は、カウンタを任意のキーボードマクロによって最後に挿入された値にリセットします。(通常、このコマンドを使用すると、最後の挿入は同じマクロ内となり、カウンタの値も同一になります。)

コマンド C-x C-k C-f (kmacro-set-format) は、マクロカウンタを挿入する際に使用するフォーマットを問い合わせます。デフォルトのフォーマットは ‘%d’ で、これは数値をパディングなしで10進数で挿入することを意味します。ミニバッファを空にして終了すると、フォーマットがこのデフォルトにリセットされます。format 関数が受け付け、かつ単一の整数追加引数で意味が通じる任意のフォーマット文字列を指定できます(The Emacs Lisp Reference Manual の Formatting Strings を参照してください)。ミニバッファにフォーマット文字列を挿入する際は、ダブルクォートで囲まないでください。

キーボードマクロが定義または実行されていない状態でこのコマンドを使用すると、新しいフォーマットがそれ以降のすべてのマクロ定義に適用されます。既存のマクロは、定義時に有効だったフォーマットを引き続き使用します。キーボードマクロの定義中にフォーマットを設定すると、その時点から定義中のマクロに適用されますが、それ以降のマクロには影響しません。マクロの実行時には、各ステップにおいて、そのステップの定義時に有効だったフォーマットが使用されます。マクロの実行中に行われるフォーマットの変更は、定義時の変更と同様に、それ以降のマクロには影響しません。

C-x C-k C-f で設定されたフォーマットは、レジスタに格納された数値の挿入には影響しません。

レジスタをカウンタとして使用し、マクロの実行ごとに値をインクリメントすれば、キーボードマクロカウンタと同じことができます。レジスタへの数値の保持を参照してください。ほとんどの場合、キーボードマクロカウンタを使用する方が簡単です。