キーボードマクロには、それぞれカウンターが割り当てられています。これはマクロの定義を開始したとき0に初期化されます。このカレントカウンター(current counter)の数値をバッファーに挿入することもできます。カレントカウンターの数値は、マクロが呼び出された回数にもとづきます。バッファーにカウンターの値が挿入される度に通常、カウンターは増加します。
カレントカウンターに加えて、前回カレントカウンターが増加またはセットされたときにもっていた値を記録する、前回カウンター(previous counter)も保守します。C-u 0 C-x C-k C-iにより増分値0でカレントカウンターを増加させると、カレントカウンターの値も前回カウンターの値として記録されることに注意してください。
キーボードマクロの定義では、キーボードマクロカウンターの値をバッファーに挿入します(kmacro-start-macro-or-insert-counter
)。
キーボードマクロカウンターの値をバッファーに挿入します(kmacro-insert-counter
)。
キーボードマクロカウンターをセットします(kmacro-set-counter
)。
プレフィクス引数をキーボードマクロカウンターに加えます(kmacro-add-counter
)。
挿入するキーボードマクロカウンターの書式を指定します(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進数字が挿入されることを意味します。ミニバッファーに何も入力せずにexitすることにより、このデフォルト書式にリセットできます。format
関数(この関数はさらに1つの整数の引数をとります)が受け入れる書式文字列を指定できます(Formatting
Strings in The Emacs Lisp Reference
Manualを参照してください)。ミニバッファーに書式文字列を入力するときは、書式文字列をダブルクォーテーションで括らないでください。
キーボードマクロの定義および実行がされていないときにこのコマンドを使うと、新しい書式はそれ以降のマクロ定義すべてに影響を及ぼします。既存のマクロは、それが定義されたときの書式を使いつづけます。キーボードマクロ定義中に書式をセットすると、そのマクロが定義されている箇所に影響を及ぼしますが、それ以降のマクロには影響を与えません。マクロの実行においては、そのマクロ定義の時点の書式が使われます。マクロの実行中にマクロ書式を変更すると、これは定義中における書式の変更と同様、それ以降のマクロに影響を与えません。
C-x C-k C-fによりセットされた書式は、レジスターに格納された数字の挿入には影響しません。
マクロの繰り返しにおいてレジスターを増加してカウンターとして使う場合、これはキーボードマクロカウンターと同じことです。レジスターに数字を保存するを参照してください。大抵の用途では、キーボードマクロカウンターを使う方が単純です。