2011年2月10日木曜日

Emacsのrepeatコマンド

コマンドをリピートするためのコマンドはrepeatrepeat-complex-commandの2種類(ほかにもっとあるかもしれない)。

repeat
直前に実行したコマンドをリピート。単純な例を挙げると、C-f(forward-charコマンド)を押した後にM-x repeatを実行すればC-fが繰り返される。
repeat-complex-command

直前に実行した、"complex command"をリピート。この "complex command" というのはミニバッファへの入力を要求するようなコマンドのこと。

たとえば query-replaceコマンドで文字列置換を行ってから、C-fを何回かタイプしたしたとする。この状態でM-x repeat-complex-commandを実行すると、C-fは無視され、"complex"である query-replaceコマンドが繰り返される。ただし、いきなり実行されるのではなくミニバッファへの入力待ち状態になる。

ちなみに、repeat と repeat-complex-command はそれぞれ C-x zC-x ESC ESC に割り当てられている。さらに C-x z の場合、2回目以降は z だけ打てばよい。

補足:「コマンド」という用語

Emacsにおける「コマンド」というのは M-x ...で実行できる関数。言い換えると (interactive) とともに(defun)されている関数。Emacs Lisp Reference Manual にも書いてある:

21.2 Defining Commands
======================

The special form `interactive' turns a Lisp function into a command.

ある関数がコマンドかどうか判別するために、commandpという関数もある。

(commandp 'isearch-forward)
=> t

(commandp 'string-match)
=> nil

0 件のコメント:

コメントを投稿