Next: , Previous: , Up: Basic   [Contents][Index]


7.10 数引数

数学や計算機の用語では、引数(argument)という単語は、“関数や操作に与えるデータ”を意味します。Emacsのコマンドには、数引数(numeric argument)(プレフィクス引数(prefix argument)とも呼ぶ)を指定できるものがあります。引数を反復回数として解釈するコマンドもあります。たとえば、引数10をC-fに指定すると、カーソルを通常の1文字ではなく、10文字分前向きに移動します。これらのコマンドでは、引数を指定しないと引数1を指定したのと同等になります。この種のコマンドの多くでは、負の引数を指定すると、逆向きの移動や逆の操作を指示することになります。

数引数を指定するもっとも簡単な方法は、METAキーを押しながら数字またはマイナス記号(と数字)を入力する方法です。以下はその例です:

M-5 C-n

これは5行下に移動します。キーM-1M-2、...、同様にM--は、次のコマンドへの引数をセットアップするコマンド、(digit-argumentnegative-argument)にバインドされています。数字をともなわないM--は、通常-1を意味します。

2桁以上の数字を入力したい場合、2文字目以降の数字を入力するときにMETAを押しつづける必要はありません。つまり50行下に移動するときは、以下のように入力します:

M-5 0 C-n

これは、(あなたが期待するように)‘0’を5つコピーして挿入してから1行下がるのではないことに注意してください。‘0’はプレフィクス引数の一部として扱われます。

(‘0’を5つコピーして挿入するときは、M-5 C-u 0と入力します。ここでC-uはプレフィクス引数を終端させるので、次のキー入力はあなたが実行したいコマンドです。ここでのC-uの意味はこのケースだけに適用される使い方です。C-uの通常の役割については以下を参照してください。)

数引数を指定する別の方法として、M-1M-2、...と入力するかわりに、C-u (universal-argument)のあとに数字(負の引数の場合はマイナス記号と数字)を入力する方法があります。通常、数字をともなわないマイナス記号は-1を意味します。

単独のC-uは、“4倍”という特別な意味をもち、次のコマンドの引数を4倍にします。C-u C-uは16倍です。つまりC-u C-u C-fは16文字前方に移動します。その他に便利な使い方としてはC-u C-nC-u C-u C-n(適当な割り合いで画面を下に移動する)や、C-u C-u C-o(16個の空行を作る)、C-u C-k(4行削除する)、などがあります。

自分自身を挿入する文字の前に数引数を使えば、指定した分のコピーを挿入できます。これは挿入したい文字が数字でないときは簡単です。たとえばC-u 6 4 aは、‘a’を64個コピーして挿入します。しかし数字を挿入したいときは、これではうまくいきません。C-u 6 4 1は引数に641を指定することになってしまいます。このようなときは引数と挿入したい数字を分けるために、他のC-uを使うことができます。たとえばC-u 6 4 C-u 1とすれば、これは‘1’を64個コピーして挿入します。

引数の有無は確認しても、その値は無視するコマンドもあります。たとえばコマンドM-q (fill-paragraph)は、1行に収まるようできるだけテキストをフィルしますが、引数をともなうと、余分なスペースを挿入してテキストが正確に1行の最大幅を使うよう均等に割り付けてフィルします(M-qについては、Fillingを参照してください)。このようなコマンドは、引数として単にC-uを指定するだけで充分です。

引数の値を繰り返しの回数として使いますが、引数がないときは特別な処理を行うコマンドもあります。たとえばコマンドC-k (kill-line)に引数nを指定すると、これは行末の改行も含めてn行をkillします。しかし引数を指定しないでC-kした場合、ポイントから改行までのテキストをkillするか、ポイントが行末にある場合は改行をkillします。つまりコマンドC-kを引数なしで2回呼び出すと、C-kに引数1を指定したのと同様、空でない行をkillできます(C-kについての情報は、Killingを参照してください)。

いくつかのコマンドは、C-uだけの引数を通常の引数とは異なるものとして扱います。また、マイナス記号のみの引数を、-1とは区別するコマンドもあります。これらの例外については、必要になったときに説明します。これらの例外は、それぞれのコマンドを使いやすくするためにあり、コマンドのドキュメント文字列に記載されています。

コマンドの前に引数を入力するという点を強調するために、そしてコマンドが呼び出されてから入力されるミニバッファー引数(Minibufferを参照してください)と区別するために、わたしたちはプレフィクス引数(prefix argument)という言葉を使います。