[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3. 基本編集コマンド

テキストの入力, 修正, ファイルへの保存といった基本操作について説明します. これらに接するのが初めてという読者は, 手を動かしながら学ぶチュートリアルを実行したほうが, もっと簡単に習得できる思います. チュートリアルを利用するには, Emacsを起動してControl-h tと打ちます. (9)

画面をクリアして再表示するには, C-lrecenter)と打ちます.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.1 テキストを挿入する

編集中のテキストに印字文字を挿入するには, 単にその文字を打ちます. こうすると, 打鍵した文字がバッファのカーソル位置 (すなわちポイント位置. see section ポイント)に挿入されます. カーソルは右(前向き)に移動して, それにあわせてカーソル以降のすべてのテキストも右(前向き)に移動します. バッファ内のテキストが‘FOOBAR’であって, カーソルが‘B’に重なっているとすると, XXと打つとカーソルは‘B’に重なったままで, ‘FOOXXBAR’となります.

挿入したばかりのテキストを削除(delete)するには, <DEL>キーを使います. <DEL>キーはカーソルのまえの文字を削除します (カーソルが重なっている文字ではない. その文字はカーソルのうしろにある). カーソルとカーソル以降のすべてのテキストは左(後向き)に移動します. つまり, 図形文字を1つ打った直後に<DEL>を打つと, 挿入を取り消したことになります.

行を終えて新たな行を打ち始めるには, <RET>を打ちます. これにより, バッファに改行文字が挿入されます. ポイントが行の途中にある場合, <RET>は行を分割します. カーソルが行頭にあるときに<DEL>を打つと, 直前の改行文字が削除されて直前の行と連結されます.

自動詰め込み(auto-fill)モードと呼ばれる特別なマイナモードを オンにしておくと, 行が長くなりすぎたときにEmacsが自動的に行を分割します. 自動詰め込み(auto-fill)モードの使い方は, See section テキストの詰め込み.

既存のテキストを右に押しやるのではなく, テキストを順次置き換える(上書きする)のが好みならば, マイナモードの1つである上書き(overwrite)モードをオンにします. See section マイナモード(minor mode).

印字文字と<SPC>は直接挿入できますが, それ以外の文字は編集コマンドとして機能して, それ自体を挿入しません. コントロール文字や8進で0200を超える文字コードの文字を挿入したい場合には, まずControl-qquoted-insert)と打って, それらの文字をクォート(quote) (10) する必要があります. (Control-qは, 通常, C-qと略す. ) C-qの使い方には, つぎの2つがあります.

マルチバイト文字が使用可ならば, 8進コード0200から0377までは正しい文字ではありません. この範囲のコードを指定すると, C-qはISO Latin-n文字集合の利用を意図しているとみなして, 指定したコードを対応するEmacs文字コードに変換します. See section マルチバイト文字を使用可能にする. 言語環境の選択(see section 言語環境)を介して, ISO Latin文字集合を1つ選びます.

8進数のかわりに10進数や16進数を使うには, 変数read-quoted-char-radixに10や16を設定します. 基数が10を超える場合には, aから始まるいくつかの英字は 文字コードの一部として数字の桁と同じように扱われます.

C-qに数引数を指定すると, クォートした文字を何個挿入するかを指定します(see section 数引数).

カスタマイズ情報: ほとんどのモードでは, <DEL>はコマンドdelete-backward-charを実行します. <RET>はコマンドnewlineを実行します. 自己挿入の図形文字はコマンドself-insertを実行します. self-insertは, これを起動した文字が何であってもその文字を挿入します. いくつかのメジャーモードでは, <DEL>を別のコマンドにバインドし直しています.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2 ポイント位置を移動する

文字の挿入以外のことを行うには, ポイント(see section ポイント) の移動方法を知っておく必要があります. もっとも簡単な方法は, 矢印キーを使うか, 移動先の箇所でマウスの左ボタンをクリックします.

カーソル移動のためのコントロール文字やメタ文字もあります. 一部は矢印キーと同等です (これらは, 矢印キーを備えた端末が現れるまえからあった. 矢印キーがない端末では便利). 他のものは, こったことをします.

C-a

行頭に移動する(beginning-of-line).

C-e

行末に移動する(end-of-line).

C-f

前向き(右)に1文字移動する(forward-char).

C-b

後向き(左)に1文字移動する(backward-char).

M-f

前向きに1語移動する(forward-word).

M-b

後向きに1語移動する(backward-word).

C-n

垂直に1行下へ移動する(next-line). このコマンドは行内での横方向の位置を保とうとする. したがって, 行の途中で使うと, つぎの行の途中に移動する. テキストの最終行である場合には, C-nは新たな行を作り, その行へ移動する.

C-p

垂直に1行上へ移動する(previous-line).

M-r

ポイントをウィンドウの縦方向の中央位置で左端に移動する (move-to-window-line). テキストは画面上を移動しない.

数引数は, 画面上の何行目にポイントを移動するかを指定する. 行数は, ウィンドウ上端(0行目)から下向きに数える. 負の引数では, ウィンドウの下端(-1行)から数える.

M-<

バッファの先頭に移動する(beginning-of-buffer). 数引数nを指定すると, 先頭から全体のn/10の行にポイントを移動する. 数引数の詳細については, see section 数引数.

M->

バッファの末尾に移動する(end-of-buffer).

M-x goto-char

数値nを読み取り, バッファのn番目の文字にポイントを移動する. バッファの先頭が位置1.

M-x goto-line

数値nを読み取り, n行目にポイントを移動する. バッファの先頭が第1行.

C-x C-n

現在ポイントがある桁をC-nC-p半恒久的な目標桁として設定する. このあと, これらのコマンドは, 移動先の各行でこの桁位置に, あるいは, 行の内容によっては可能な限りこの桁に近い位置にポイントを移動する. この目標桁は取り消すまで有効.

C-u C-x C-n

目標桁を取り消す. これ以後, C-nC-p は, 通常のように 横方向の位置を保とうとする.

変数track-eolnil以外を設定すると, 行末にポイントがある場合のC-nC-pは, 移動先の行でも行末にポイントを移動します. 通常, track-eolnilです. track-eolのような変数の設定方法については, See section 変数.

通常, バッファの最終行でのC-nは, 新しい行を追加します. 変数next-line-add-newlinesnilである場合, C-nは新規の行を追加せずに (先頭行でのC-pと同様に)エラーになります.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.3 テキストの消去

<DEL>

ポイントの直前の文字を削除する(delete-backward-char).

C-d

ポイントの直後の文字を削除する(delete-char).

C-k

行末までをキルする(kill-line).

M-d

つぎの語の末尾までを前向きにキルする(kill-word).

M-<DEL>

まえの語の先頭までを後向きにキルする(backward-kill-word).

ポイントの直前(つまり, カーソルの直前)の文字を削除する <DEL>キーについてはすでに知っていますね. Control-dC-dと略記)は, ポイントの直後の文字 (つまり, カーソルが重なっている文字)を削除します. すると, 残りのテキストは左に移動します. 行末でC-dを打つと, その行とつぎの行が連結されます.

大量のテキストを消去するには, C-kを使います. C-kは1行を一度にキルします. 行頭や行の途中でC-kを打つと, 行末までのすべてのテキストをキルします. 行末でC-kを打つと, その行とつぎの行を連結します.

より柔軟なテキストのキルについての詳細は, See section 削除とキル.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.4 変更をアンドゥする(もとに戻す)

バッファのテキストに対する変更は, ある時点まで遡って, すべてアンドゥ(もとに戻すことが)できます. 各バッファでは個々の変更をそれぞれ記録していて, アンドゥコマンドは, つねにカレントバッファに作用します. 通常, 各編集コマンドはアンドゥ記録に別々の項目を作成しますが, query-replaceのようなコマンドは一度に多くの項目を作りますし, 自己挿入文字のように非常に単純なコマンドは, もとに戻すのを単純にするために, まとめられます.

C-x u

一塊の変更をもとに戻す. 普通, 1つのコマンドに相当する(undo).

C-_

同じ.

C-u C-x u

リージョン内で, 一塊の変更をもとに戻す.

変更をもとに戻すには, コマンド, C-x uC-_を使います. 始めにこのコマンドを実行すると, 直前の変更をもとに戻します. ポイントは, もとに戻されたコマンドを実行するまえの位置に戻ります.

C-_C-x uを連続して実行すると, アンドゥ情報の限界に達するまで, 次々に以前の変更をもとに戻していきます. 記録されているすべての変更をもとに戻してしまうと, アンドゥコマンドはその旨エラーメッセージを表示します.

アンドゥコマンド以外の他のコマンドを実行すると, アンドゥコマンドの連続実行系列が断ち切られます. これ以後, これよりまえのアンドゥコマンドの実行自体が, もとに戻すことが可能な一般の変更として扱われます. したがって, もとに戻してしまった変更をやはりそのとおりに 変更しておきたい場合には, C-fと打つか, あるいは, 無害なコマンドを実行して アンドゥの連続実行系列を断ち切ってから, さらにアンドゥコマンドを打ちます.

普通のアンドゥは, カレントバッファにおけるすべての変更に作用します. カレントリージョン内に制限した選択的なアンドゥ(selective undo)を 行うこともできます. これには, リージョンを設定してから, 数引数(値は関係ない)を指定して undoコマンドを, つまり, C-u C-x uC-u C-_を実行します. これにより, リージョン内のもっとも最近の変更がもとに戻ります. 同じリージョン内の変更をさらにもとに戻すには, undoコマンドを繰り返します(これには数引数は必要ない). 暫定マーク(transient-mark)モードでは, リージョンが活性のときにundoを使うと選択的なアンドゥを行います. つまり, 数引数は必要ありません.

バッファを誤って変更してしまった場合, もとに戻すもっとも簡単な方法は, モード行の先頭部分から星印が 消えるまでC-_を繰り返し打つことです. そうすれば, すべての修正を取り消したことになります. アンドゥコマンドによりモード行から星印が消えた場合はつねに, バッファの内容がファイルを訪問したときと同じであるか, 最後に保存したときと同じであることを意味します.

意図してバッファを変更したかどうかあやふやなときは, 一度だけC-_を打ちます. もとに戻すことで最後の変更箇所がわかりますから, それが意図した変更かどうか判断できるでしょう. 意図した変更でなければ, もとに戻したままにしておきます. 意図した変更であったなら, 上記の方法で変更し直します.

すべてのバッファでアンドゥ情報を記録するわけではありません. 空白で始まる名前のバッファでは記録しません. これらのバッファは, Emacsやその拡張部分が内部的に使用するもので, ユーザーが通常見たり編集したりしないテキストを保持しています.

単なるカーソル移動はアンドゥできません. バッファの内容を変更したときだけアンドゥ情報が保存されます. ただし, いくつかのカーソル移動コマンドはマークを設定しますから, これらのコマンドをときどき使えば, マークリング(see section マークリング)から取り出しながら, 通ってきたそれぞれの箇所へ戻ることができます.

バッファに関するアンドゥ情報が大きくなると, Emacsはもっとも古いアンドゥ情報から順に(ガベッジコレクション中に) 破棄していきます. 保持すべきアンドゥ情報の量を指定するには, 2つの変数undo-limitundo-strong-limitを設定します. これらの変数の値は, 保存領域のバイト数です.

変数undo-limitは緩い限界(soft limit)を設定します. Emacsは, このサイズに達するまでのコマンド分のアンドゥデータを保持します. データ量がこのサイズを超える場合もありますが, このデータ量を超えるような古いコマンド分のデータは保持しません. デフォルトは, 20000です. 変数undo-strong-limitは, 厳密な限界(stricter limit)を設定します. この量を超えるデータに対応するコマンドのデータは破棄します. 初期値は30000です.

これらの変数の値に関わらず, 最新の変更を破棄することはありませんので, 意図しない大きな変更を加えてしまった直後に ガベッジコレクションが発生しても, その変更をアンドゥできないというようなことはありません.

アンドゥコマンドを実行するキーがC-x uC-_と2つある理由は, 1文字キーにするほど重要なのですが, どうやってC-_を打つか自明でない キーボードもあるからです. C-x uは, どの端末でも素直に打てる代替手段なのです.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.5 ファイル

Emacsバッファ内でテキストを作成したり変更したりするには, これまでに説明したコマンドで十分なはずです. より高度なEmacsコマンドといっても, これらの操作を容易にするだけです. しかし, テキストを恒久的なものとするには, ファイル(file)に保存する必要があります. ファイルとは, オペレーティングシステムが保存するために名前を付けたテキストの一塊であり, あとでその名前で取り出せます. Emacsでファイルを編集する場合を含めて, ファイルの内容を眺めたり利用したりするには, ファイル名を指定する必要があります.

/usr/rms/foo.c’という名前のファイルがあるとしましょう. このファイルを編集し始めるには, Emacsではつぎのように打ちます.

 
C-x C-f /usr/rms/foo.c <RET>

ここで, ファイル名は, コマンドC-x C-ffind-file)に対する 引数(argument)として与えます. このコマンドは引数を読むためにミニバッファを使います. 引数の入力を終えるには, <RET>を打ちます(see section ミニバッファ).

Emacsはコマンドに従い, ファイルを訪問(visiting)します. つまり, バッファを作成し, ファイルの内容をそのバッファにコピーし, ユーザーが編集できるようにそのバッファを表示します. テキストを変更したら, C-x C-ssave-buffer)と打てば, 新しいテキストをファイルに保存(save)できます. これにより, バッファの変更した内容を ファイル‘/usr/rms/foo.c’にコピーし戻したので, 変更は恒久的になります. ユーザーが保存するまでは, 変更はEmacs内部のみに存在するだけで, ファイル‘foo.c’自体は未変更のままです.

ファイルを作成するには, そのファイルが既存であるかのように, C-x C-fでファイルを訪問するだけです. これにより, 空のバッファが作られ, ファイルに収めたいテキストを挿入できるようになります. C-x C-sでバッファを保存したときに, ファイルが実際に作成されます.

もちろん, ファイルについてはもっと知っておく必要があります. See section ファイルの扱い方.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6 ヘルプ

キーの機能を忘れてしまった場合には, ヘルプ文字C-h(あるいはC-hの別名である<F1>)を使って, 調べられます. C-h kと打ってから, 調べたいキーを続けて打ちます. たとえば, C-h k C-nは, C-nが何をするか教えてくれます. C-hはプレフィックスキーです. C-h kは, C-hの1つのサブコマンド (コマンドdescribe-key)です. C-hには他にもサブコマンドがあり, それぞれ異なる種類のヘルプを表示します. C-hを2回打てば, ヘルプ機能自体の説明を見ることができます. See section ヘルプ機能.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.7 空行

空行の挿入と削除に関する特別なコマンドや技法を紹介します.

C-o

カーソルの直後に1行以上の空行を挿入する(open-line).

C-x C-o

連続する空行を1行だけ残してすべて削除する(delete-blank-lines).

既存の行のまえに新たに1行を挿入するには, 新しい行のテキストを打ってから<RET>を打つこともできます. しかし, まず空行を作ってから, そこに希望のテキストを挿入するほうが何をしているのかがわかりやすいでしょう. キーC-oopen-line)を使えば簡単です. これはポイントの直後に改行を挿入して, ポイントは改行の直前に置かれたままとなります. C-oに続けて, 新しい行のテキストを打ちます. C-o F O Oは, ポイントの最終的な位置を除けば, F O O <RET>と同じ効果を持ちます.

複数の空行を作るには, C-oを数回打つか, 作りたい空行の個数を指定する数引数を指定します. 数引数の指定方法は, See section 数引数. 詰め込み接頭辞を設定してある場合, 行の先頭でC-oコマンドを使うと, このコマンドは新しい行に詰め込み接頭辞を挿入します. See section 詰め込み接頭辞.

余分な空行を削除するには, コマンドC-x C-odelete-blank-lines)を使います. 連続する複数の空行の中でC-x C-oを実行すると, 1行を残してすべての空行を削除します. 空行が1行だけの場合, その空行自体を削除します. 空行でない行にポイントがある場合, その行に続くすべての空行を削除します.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.8 継続行

<RET>で分割せずに1行に文字を加え続けると, その行は画面上で2行以上を占めるようになります. このとき, そのような行の最後の行を除くすべての行の右端には, ‘\’が表示されます. この‘\’は, 画面上の後続の行はテキスト内の独立した行ではなく, 画面に収まりきらない長い行が継続(continuation) していることを意味します. この継続を, 折り返し(wrapping)とも呼びます.

行が長くなりすぎたときにEmacsが自動的に改行を挿入すると便利なことがあります. 画面上での継続は, このようには機能しません. 自動的に改行するようにするには, 自動詰め込み(auto-fill)モード(see section テキストの詰め込み)を使います.

継続のかわりの方法として, Emacsは長い行を切り捨て(truncation)て 表示することもできます. つまり, 画面やウィンドウの幅に収まりきらない文字は表示しません. もちろん, 一時的に見えないだけで, バッファ内には存在しています. 切り捨てていることを示すために, ‘\’ではなく‘$’を右端に用います.

水平スクロールを使っていたり, ウィンドウを左右に並べていると, 継続のかわりに切り捨て表示します(see section 複数のウィンドウ). 特定のバッファの変数truncate-linesnil以外を設定すると, そのバッファを切り捨て表示にできます(see section 変数). 変数truncate-linesの値を変更すると, この変数はカレントバッファにローカルになります. そうするまでは, デフォルト値が使われます. デフォルトの初期値はnilです. See section ローカル変数.

テキストの表示方法に影響する変数については, See section 表示を制御する変数.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9 カーソル位置の情報

バッファのある部分の大きさや位置に関する情報を得るコマンドや 行を数えるコマンドを紹介します.

M-x what-page

ポイントがあるページの番号とそのページ内での行番号を表示する.

M-x what-line

ポイントがある行のバッファ内での行番号を表示する.

M-x line-number-mode

現在行の自動行番号表示をオン/オフする.

M-=

カレントリージョンの行数を表示する(count-lines-region). リージョンに関しては, see section マークとリージョン.

C-x =

ポイントの直後にある印字文字の文字コード, ポイントの文字位置, ポイントの桁位置を表示する(what-cursor-position).

行番号に関するコマンドは2つあります. M-x what-lineは現在行の行番号を計算して, エコー領域に表示します. 指定した行番号の行へ移動するには, M-x goto-lineを使います. このコマンドは, 行番号を聞いてきます. これらの行番号は, バッファの先頭を1行目と数えます.

モード行で現在行の行番号を知ることもできます. See section モード行. バッファをナロイングしてある場合, モード行中の行番号は参照可能な範囲内での相対的なものになります (see section ナロイング). 対照的に, what-lineは, ナロイングされた範囲内での行番号と, バッファ全体での行番号の両方を表示します.

これに対し, M-x what-pageは, ファイルの先頭からページを数え, さらにページ内での行番号も数えて, 両方を表示します. See section ページ.

この話題に関連して, M-=count-lines-region)も説明しておきましょう. これは, リージョンの行数を数えて表示します(see section マークとリージョン). カレントページの行数を数えるコマンドC-x lについては, See section ページ.

コマンドC-x =what-cursor-position)は, カーソルがある箇所の桁位置を求めたり, ポイントに関するその他の種々の情報を得るために使います. エコー領域につぎのように表示します.

 
Char: c (0143, 99, 0x63)  point=21044 of 26883(78%)  column 53 

(これは, 例の中の‘column’のまえにポイントがあるときの実際の出力. )

Char:’のあとの4つの値は, ポイントの直後の文字を表していて, 文字そのもの, 続いて, 文字コードの8進表示, 10進表示, 16進表示です. 非ASCIIのマルチバイト文字に対しては, バッファのコーディングシステムにおいて当該文字をまちがいなく, かつ, 単一バイトで符号化できる場合には, ‘ext’とバッファのコーディングシステムで表した文字コードの16進表示が 続きます(see section コーディングシステム). 文字の符号が1バイトより長い場合には, Emacsは‘ext ...’を表示します.

point=’のあとは, ポイント位置を文字単位に数えたものです. バッファの先頭を位置1, つぎの1文字を2, というように数えます. つぎの大きな数字はバッファ内の総文字数です. 続く括弧の中は, ポイント位置の全サイズに対する百分率です.

column’に続くものは, ウィンドウの左端からの桁数で表した ポイントの水平位置です.

バッファをナロイングしていて, バッファの先頭と末尾のテキストの一部が 表示されていない場合, C-x =は, 現在参照可能な範囲に関する情報も表示します. たとえばつぎのようになります.

 
Char: C (0103, 67, 0x43)  point=252 of 889(28%) <231 - 599>  column 0 

ここで, 新たに追加された2つの数字が, ポイントを設定できる文字位置の下限と上限を示します. これら2つの位置のあいだの文字が参照可能な文字です. See section ナロイング.

ポイントがバッファの末尾(あるいは参照可能な部分の末尾)にある場合, C-x =は, ポイントの直後の文字に関する情報は表示しません. 出力はつぎのようになります.

 
point=26957 of 26956(100%)  column 0 

C-u C-x =は, バッファ内の位置と桁位置のかわりに, 文字に関する追加情報, つまり, 文字集合名とその文字集合内でその文字を識別するコードを表示します. ASCII文字は, 文字集合ASCIIに属するものと識別します. さらに, 文字を完全に符号化するのに単一バイトより多く必要な場合であっても, ‘ext’のあとに文字コードを表示します. コーディングシステムがiso-2022-7bitであるバッファ内にある Latin-1のアクサングレーブ付きの文字Aの例を示します. (11)

 
Char: À (04300, 2240, 0x8c0, ext ESC , A @) (latin-iso8859-1 64)

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.10 数引数

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

端末のキーボードに<META>キーがある場合, 数引数を入力するもっとも簡単な方法は, <META>キーを押し下げたままで, 数字やマイナス記号を打ちます. たとえば,

 
M-5 C-n

は, カーソルを5行下に移動します. Meta-1, Meta-2, Meta--などの文字がこのように動作するのは, これらのキーが, 後続のコマンドに引数を与えるように定義されたコマンド (digit-argumentnegative-argument)に バインドされているからです. コントロールやコントロールとメタで修飾した数字と-も, 同様に数引数を指定します.

引数を指定する別の方法は, C-uuniversal-argument)コマンドに続けて 引数の数字を入力することです. C-uでは, 修飾キーを押し下げ続けることなく引数の数字を打てます. C-uはすべての端末で使えます. 負の引数を指定するには, C-uのあとにまずマイナス記号を打ちます. マイナス記号だけだと-1を意味します.

C-uのあとに数字でもマイナス記号でもない文字を打つと, 『4倍する』という特別な意味になります. つまり, 後続のコマンドに渡す引数を4倍します. C-uを2回打つと, 引数を16倍します. したがって, C-u C-u C-fは, カーソルを前向きに16文字分移動します. 16文字は通常の画面で約1/5行に相当するので, カーソルを『速く』移動させたい場合に便利な方法です. 便利な他の組み合せは, C-u C-nC-u C-u C-n(画面の下方への移動に便利), C-u C-u C-o(『数多く』の空行を作る), C-u C-k(4行キルする)です.

コマンドによっては, 引数の値ではなく, 引数の有無だけを問題にします. たとえば, コマンドM-qfill-paragraph)に引数を指定しないと テキストの詰め込みのみを行います. 引数を指定すると, さらに幅揃えも行います. (M-qに関する詳細は, see section テキストの詰め込み. ) C-uだけを使えば, このようなコマンドに簡単に引数を指定できます.

引数の値を反復回数として使うにも関わらず, 引数がないと特別な動作をするコマンドもあります. たとえば, C-kkill-line)に引数nを指定すると, 行区切りの改行も含めてn行をキルします. これに対し, 引数を指定しない場合は特別な動作となります. つまり, つぎの改行文字までのテキストをキルするか, 行末にポイントがある場合は改行そのものをキルします. したがって, 引数を指定せずにC-kを2回実行すると, 引数1を指定したC-kと同様に, 空行でない1行をキルします. (C-kの詳細については, see section 削除とキル. )

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

数引数を使って, 文字のコピーを複数個挿入することもできます. この操作は, 数字以外の文字ならば簡単です. たとえば, C-u 6 4 aで, 文字‘a’を64個挿入できます. しかし, 数字では機能しません. C-u 6 4 1は, 引数が641であることを意味し, 何も挿入しません. 引数と挿入したい数字を区切るには, もう1つC-uを打ちます. たとえば, C-u 6 4 C-u 1で, 数字‘1’を64個挿入できます.

コマンドのまえに引数を打つということを強調するために, また, コマンドのあとのミニバッファ引数と区別するために, 『数引数』と同様に用語『前置引数』を使います.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.11 コマンドを繰り返す

コマンドC-x zrepeat)は, 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回ずつ繰り返します.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by 新堂 安孝 on September 22, 2009 using texi2html 1.82.