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

19.1 基本的な使い方

F3

キーボードマクロ (kmacro-start-macro-or-insert-counter) の定義を開始します。

F4

キーボードマクロを定義中の場合は定義を終了し、そうでない場合は直近のキーボードマクロを実行します (kmacro-end-or-call-macro)。

C-u F3

直前のキーボードマクロを再実行し、その定義にキーを追加する。

C-u C-u F3

最後のキーボードマクロを再実行せずに、キーを追加する。

C-x C-k r

リージョン (apply-macro-to-region-lines) で始まる各行で、最後のキーボードマクロを実行する。

C-x (

キーボードマクロ(旧形式)の定義を開始します (kmacro-start-macro)。プレフィックス引数を指定すると、最後のマクロにキーが追加されます。

C-x )

マクロ定義(旧形式)を終了する (kmacro-end-macro); 接頭辞引数はマクロ実行の繰り返し回数となる。

C-x e

直近に定義されたキーボードマクロを実行します(kmacro-end-and-call-macro)。接頭辞引数は繰り返し回数として扱われます。

キーボードマクロの定義を開始するには、F3 と入力します。それ以降、キー操作は引き続き実行されますが、同時にマクロの定義の一部としても組み込まれます。モードラインには ‘Def’ と表示され、現在の状態を知らせてくれます。完了したら、F4 (kmacro-end-or-call-macro) と入力して定義を終了します。例えば、

F3 M-f foo F4

1単語分進み、その後 ‘foo’ を挿入するマクロを定義します。なお、F3 と F4 はマクロの一部にはなりません。

マクロを定義した後は、F4 で呼び出すことができます。上記の例では、これは M-f foo と再度入力するのと同じ効果になります。(F4 コマンドの2つの役割に注意してください。マクロを定義している最中であればその定義を終了し、そうでなければ直前のマクロを呼び出します。)また、F4 に数値の接頭辞引数 ‘n’ を指定することもでき、これはマクロ ‘n’ 回呼び出すことを意味します。引数に 0 を指定すると、エラーが発生するか C-g(MS-DOS の場合は C-Break)と入力するまで、マクロが無限に繰り返されます。

上記の例では、キーボードマクロで活用できる便利なテクニックを紹介します。テキスト内の一定間隔で操作を繰り返したい場合は、マクロの一部に移動コマンドを組み込んでください。この場合、マクロを繰り返すと、連続する単語の後に文字列 ‘foo’ が挿入されます。

キーボードマクロの定義を終了した後、C-u F3 と入力することで、その定義にさらにキーストロークを追加できます。これは、単に F3 と入力し、その後にそれまでの定義全体を再入力することと同等です。その結果、マクロは以前に定義された通りに再実行されます。変数 kmacro-execute-before-append を nil に変更した場合、追記を行う前に既存のマクロが再実行されることはありません(デフォルトは t です)。また、C-u C-u F3 と入力することで、最後のキーボードマクロの定義の末尾に、再実行することなく追記することも可能です。

コマンドがミニバッファで引数を読み取ると、ミニバッファへの入力がコマンドと共にマクロの一部となります。そのため、マクロを再実行すると、コマンドにはマクロ入力時と同じ引数が渡されます。例えば、

F3 C-a C-k C-x b foo RET C-y C-x b RET F4

現在の行を消去し、バッファ ‘foo’ にヤンクした後、元のバッファに戻るマクロを定義します。

一部の例外を除き、キーボードマクロの定義内ではほとんどのキーボードコマンドが通常通り動作します。C-g (keyboard-quit) と入力すると、キーボードマクロの定義を終了します。C-M-c (exit-recursive-edit) の入力は動作が不安定な場合があります。マクロ内で開始された再帰的な編集を終了する場合は期待通りに動作しますが、キーボードマクロを呼び出す前に開始された再帰的な編集を終了する場合、必然的にキーボードマクロ自体も終了してしまいます。マウスイベントについても、キーボードマクロ内で使用できるものの、動作は不安定です。マクロがマウスイベントを再現する際、そのイベントの元のマウス位置、つまりマクロを定義していた時点でのマウス位置が使用されます。この影響を予測するのは困難な場合があります。

コマンド C-x C-k r (apply-macro-to-region-lines) は、リージョン内で開始される各行において、最後に定義されたキーボードマクロを繰り返し実行します。これは、ポイントを行頭に移動させてからマクロを実行することで、1行ずつ処理を行います。

前述の F3 および F4 コマンドに加え、Emacs ではキーボードマクロを定義・実行するための、より古いキーバインド群もサポートしています。マクロの定義を開始するには、C-x ( (kmacro-start-macro) と入力します。F3 と同様に、接頭辞引数を指定すると、この定義が最後のキーボードマクロに追加されます。マクロの定義を終了するには、C-x ) (kmacro-end-macro) と入力します。直近のマクロを実行するには、C-x e (kmacro-end-and-call-macro) と入力します。マクロの定義中に C-x e を入力すると、そのマクロは終了し、直ちに実行されます。C-x e と入力した直後、e を繰り返し入力することで、そのマクロを即座に1回以上繰り返すことができます。また、F4(マクロの実行に使用される場合)と同様に、C-x e に繰り返し引数を指定することも可能です。

C-x ) には引数として繰り返し回数を指定できます。これにより、マクロを定義した直後にそのマクロを繰り返すことができます。マクロの定義自体は、定義と同時に実行されるため1回目の繰り返しとしてカウントされます。したがって、C-u 4 C-x ) はマクロを直ちにさらに3回実行します。

長時間実行されるキーボードマクロの実行中、再表示(どこまで進んだかを確認するため)をトリガーすると便利な場合があります。これには C-x C-k d コマンドが利用できます。あまり実用的ではない例を挙げると、C-x ( M-f C-x C-k d C-x ) を指定すると、C-u 42 C-x e と言った際に1回の反復ごとに再表示を行うマクロが作成されます。