単純なキーで呼び出されるものや、M-x command-name RETで実行できるような多くのコマンドは、数引数で繰り返し回数(数引数を参照してください)を与えることで、その回数だけ繰り返すことができます。しかし、入力を求めるものや数引数を別の目的に使うコマンドでは、この方法はうまくいきません。
コマンドC-x z
(repeat
)は、Emacsコマンドを何回も反復する別の方法です。このコマンドは、直前のEmacsコマンドが何であっても、それを繰り返します。繰り返されるコマンドは、まえと同じ引数を使います。毎回新たに引数を読み取ることはしません。
コマンドを2回以上繰り返すにはzを追加して入力します。1つのzでコマンドを1回繰り返します。z以外の文字を入力するか、マウスボタンを押すと繰り返しを終了します。
たとえば、20文字削除するためにC-u 2 0 C-dと入力したとしましょう。C-x z z zと入力すれば、(引数を含めて)削除コマンドをさらに3回繰り返し、全部で80文字削除できます。始めのC-x zでコマンドを1回繰り返し、そのあとのそれぞれのzで1回ずつ繰り返します。
1つの文字をタイプすることによって、2つ以上のキーシーケンスにバインドされたコマンドを繰り返し実行できるrepeat-mode
モードをアクティブにすることもできます。たとえばもっとも最近行った編集をアンドゥするためにC-x u (undo
のこと; Undo(取り消し)を参照)をタイプした後に、u u u…とタイプすることで更に多くの編集をアンドゥすることができます。同様にC-x o C-x o C-x o…のかわりにC-x o o o…とタイプすれば、いくつかのウィンドウを超えて切り替えることができます。これはそのコマンドを呼び出す完全なキーシーケンスをタイプした後に、一時的な繰り返しモードにエンターすることによって機能します。単一キーによるショートカットはエコーエリアに表示されます。
repeat-mode
での繰り返しをサポートしているのは一部のコマンドに限られます。サポートしているコマンドを確認するには、M-x describe-repeat-maps RETとタイプしてください。
一時的な繰り返しモードによって有効になる単一文字のショートカットは同じ文字である必要はありません。たとえばC-x {とタイプした後であれば{、}、^、v、あるいはこれらの文字を任意の順で混ぜ合わせてタイプすると、それに応じて選択されたウィンドウがリサイズされるでしょう。同様に*compilation*や*grep*バッファーではM-g nやM-g
pの後に任意の順に混ぜ合わせてnやpをタイプすることで、next-error
やprevious-error
でバッファーを移動することができます(Compilationモードを参照)。
前のコマンドを繰り返すよう定義された文字以外の文字をタイプすると一時的な繰り返しモードを抜けて、タイプした文字は通常通り実行されます。キーを実行せずに、一時的な繰り返しモードを抜けるだけのキーを定義することもできます。これを行うには、ユーザーオプションrepeat-exit-key
にキーの名前を指定します。自然な値としてはRETなどが考えられます。最後に何秒かのアイドル時間後に自動的に繰り返しの連鎖を中断させることも可能です。ユーザーオプションrepeat-exit-timeout
をカスタマイズして、一時的な繰り返しモードを自動的にオフに切り替えるアイドル時間の秒数を指定してください。