Go to the first, previous, next, last section, table of contents.


テキストのキルと移動

キル(kill)とは、テキストを消しさり、 それをキルリング(kill ring)にコピーすることを意味します。 キルリングからは、ヤンク(yank)することで、 テキストを取り出すことができます。 これらの操作を『カット』と『ペースト』と呼ぶシステムもあります。

Emacsにおいてテキストを移動したりコピーしたりするもっとも一般的な方法は、 テキストをキルして、あとで数箇所にヤンクすることです。 この方法はとても安全です。 というのは、直前の1回のキルだけでなく、 ここ最近の数回分のキルした内容を記録しているからです。 構文単位でキルする多くのコマンドは、 構文単位のテキスト移動にも使えるので、用途が広いともいえます。 他にも、特別な目的のためにテキストをコピーする方法があります。

Emacsには、すべてのバッファに対してたった1つのキルリングしかありません。 そのため、あるバッファでキルしたテキストを 別のバッファにヤンクできます。

削除とキル

バッファからテキストを消しさるコマンドのほとんどは、 そのテキストをキルリングにコピーしておくので、 バッファの他の部分にそのテキストを移動したりコピーしたりできます。 これらのコマンドを、キル(kill)コマンドと呼びます。 それ以外の『テキストを消すコマンド』は、 テキストをキルリングに保存しません。 これらを削除(delete)コマンドと呼びます。 (両者を区別するのは、バッファ内のテキストを消す場合だけ。) キルコマンドや削除コマンドを誤って実行してしまった場合には、 C-x uundo)コマンドを使って、もとに戻すことができます。

削除コマンドには、一度に1つの文字だけを削除する C-ddelete-char)やDELdelete-backward-char)、 空白や改行だけを削除するコマンドがあります。 単純ではないデータをかなりの分量で破壊する可能性のあるコマンドは、 一般にキルを行います。 コマンド名や個々の説明では、そのコマンドがどちらの働きをするかによって、 `キル'(kill)と`削除'(delete)を使い分けています。

削除

C-d
つぎの文字を削除する(delete-char)。
DEL
まえの文字を削除する(delete-backward-char)。
M-\
ポイントの周りの空白とタブを削除する(delete-horizontal-space)。
M-SPC
ポイントの周りの空白とタブを削除し、空白を1個だけ残す (just-one-space)。
C-x C-o
現在行の周りの空行を削除する(delete-blank-lines)。
M-^
行間の改行とそれに続く字下げを削除して2行を繋げる (delete-indentation)。

もっとも基本的な削除コマンドは、C-ddelete-char)と DELdelete-backward-char)です。 C-dはポイントの直後の文字、 つまり、カーソルが重なっている文字を削除します。 このコマンドでは、ポイントは動きません。 DELはカーソルの直前の文字を削除して、 ポイントを1つまえに移動します。 バッファ内の他の文字と同様に、改行も削除できます。 改行を削除すると、2つの行が繋がります。 実際には、C-dDELがつねに削除コマンドであるわけではありません。 引数を指定するとキルコマンドとなり、 同じ方法で2文字以上を消すことができます。

他の削除コマンドは、空白、タブ、改行といった白文字だけを削除します。 M-\delete-horizontal-space)は、 ポイントの前後にあるすべての空白とタブ文字を削除します。 M-SPCjust-one-space)も同様に削除しますが、 今ある空白の個数に関係なく(たとえ0個でも)、 ポイントの直後に空白を1個だけ残します。

C-x C-odelete-blank-lines)は、 現在行に続くすべての空行を削除します。 現在行が空行である場合には、(空行である現在行だけを残して) 先行する空行も同様にすべて削除します。

M-^delete-indentation)は、 改行とその周りの空白を削除して、 通常は空白を1個残して現在行と先行する行を繋げます。 See section 字下げ

行単位のキル

C-k
行の残りの部分、あるいは、行全体を1行以上キルする(kill-line)。

もっとも単純なキルコマンドはC-kです。 行の先頭で使うと、その行のすべてのテキストをキルして、空行にします。 空行で使うと、改行を含めてその行を完全にキルします。 空行でない行を完全にキルするには、行頭でC-kを2回打ちます。

一般に、C-kは、行末でなければ、 ポイントからその行の末尾までをキルします。 行末では、ポイントのうしろの改行をキルするので、 現在行と後続の行が繋がります。 どちらの動作をするか決めるときには、 行末にあって見にくい空白やタブを無視しますから、 ポイントが行末にあるように見えていれば、 C-kで改行がキルされると考えてください。

C-kに正の引数を指定すると、 その個数の行とそれらに続く改行をキルします (ただし、現在行のポイントよりまえのテキストは残す)。 負の引数-nを指定すると、 C-kは現在行に先行するn行 (と現在行のポイント位置よりまえのテキストを含めて)を削除します。 つまり、ポイントが行頭にある状態でC-u - 2 C-kとすれば、 先行する2行をキルします。

C-kに引数0を指定すると、 現在行のポイントよりまえのテキストをキルします。

変数kill-whole-linenil以外の場合、 行頭でC-kを使うと、行末の改行も含めて行全体をキルします。 この変数は、通常、nilです。

他のキルコマンド

C-w
リージョン(ポイントからマークまで)をキルする(kill-region)。
M-d
単語をキルする(kill-word)。 see section 単語
M-DEL
単語を後向きにキルする(backward-kill-word)。
C-x DEL
文の先頭までを後向きにキルする(backward-kill-sentence)。 see section
M-k
文の末尾までをキルする(kill-sentence)。
C-M-k
S式をキルする(kill-sexp)。 see section リストとS式
M-z char
つぎにcharが現れる箇所までをキルする(zap-to-char)。

汎用的なキルコマンドといえばC-wkill-region)です。 このコマンドは、あらかじめ連続領域をポイントとマークで囲んでおけば、 どんな連続領域でもキルできます。

探索と組み合わせた便利なキルの仕方もあります。 M-zzap-to-char)は1文字を読み取り、 ポイントからバッファ内でその文字がつぎに現れる箇所までを (その文字も含めて)キルします。 数引数を指定した場合は、反復回数を意味します。 負の引数の場合は、ポイント位置から逆方向に探索し、 ポイントの直前までをキルします。

他の構文単位でもキルできます。 M-DELM-d(see section 単語)で単語を、 C-M-k(see section リストとS式)でS式を、 C-x DELM-k(see section )で文をキルできます。

読み出し専用のバッファでもキルできます。 実際にはバッファに変更を加えることはありませんし、 ベルを鳴らしてその旨警告を発しますが、 キルしようとしたテキストはキルリングにコピーされます。 ですから、別のバッファにそのテキストをヤンクできます。 ほとんどのキルコマンドは、 このようにコピーするテキストを越えてポイントを進めますから、 連続してキルコマンドを実行しても キルリングに入る項目は通常どおり1個だけです。

ヤンク

ヤンク(yank)とは、 以前にキルしたテキストをバッファにふたたび挿入することです。 他のシステムでは『ペースト』と呼ぶこともあります。 テキストを移動したりコピーしたりする普通の方法は、 そのテキストをいったんキルしてから、別の場所に(1回以上)ヤンクすることです。

C-y
最後にキルしたテキストをヤンクする(yank)。
M-y
たった今ヤンクしたテキストをそれより以前にキルした一塊のテキストで置き換える (yank-pop)。
M-w
リージョンを実際にはキルせずに、最後にキルしたテキストとして保存する (kill-ring-save)。
C-M-w
つぎのキルを、最後にキルした一塊のテキストに付け加える (append-next-kill)。

キルリング

すべてのキルされたテキストは、キルされたテキストの塊をリストとする キルリング(kill ring)に記録されています。 キルリングはたった1つしかなくて、すべてのバッファで共有しています。 ですから、あるバッファでキルしたテキストは、 別のバッファでヤンクできます。 普通、このようにして、あるファイルから別のファイルへテキストを移動します。 (別の方法については、see section テキストの蓄積。)

コマンドC-yyank)は、 最後にキルしたテキストをふたたび挿入します。 カーソルは挿入したテキストの末尾に置かれます。 マークは挿入したテキストの先頭に置かれます。 See section マークとリージョン

C-u C-yは、テキストのまえにカーソルを置き、うしろにマークを置きます。 引数としてC-uだけを指定した場合に限り、こうなります。 C-uと数字を含めた他の引数を指定すると、 いくつまえのキル内容をヤンクするかを意味します(see section 以前にキルしたテキストのヤンク)。

一塊のテキストをコピーする場合は、 M-wkill-ring-save)を使うとよいでしょう。 このコマンドは、バッファからリージョンをキルせずに、 リージョンをキルリングにコピーします。 このコマンドは、C-wに続けてC-x uを実行するのとほぼ同等ですが、 M-wはアンドゥ履歴を変更しませんし、一時的にせよ画面表示も変わりません。

キルしたテキストの追加

通常、各キルコマンドは、キルリングに新たな項目を押し込みます。 しかし、連続したキルコマンドでは、 それぞれでキルしたテキストを1つの項目にまとめます。 そのため、1回のC-yで、キルするまえの状態に、 それらのテキストをひとまとめにヤンクできます。

したがって、テキストを一塊でヤンクしたい場合でも、 1つのコマンドでそれらをキルする必要はありません。 すべてをキルするまで、1行ずつ、あるいは、1単語ずつキルしていっても、 一括してもとに戻すことができます。

ポイント位置から前向きにキルするコマンドでは、 直前にキルしたテキストの末尾に付け加えます。 ポイント位置から後向きにキルするコマンドでは、 テキストの先頭に付け加えます。 このように、前向き/後向きの両方のキルコマンドをどのように混ぜて実行しても、 キルしたテキストの順番を崩すことなく 1つの項目としてキルリングに記録されます。 数引数を指定しても、このような追加系列が途切れることはありません。 たとえば、バッファにつぎのテキストが入っていて、 -!-の位置にポイントがあるとしましょう。

This is a line -!-of sample text.

M-d M-DEL M-d M-DELと打って、 前向き/後向きと交互にキルしても、 キルリングには1つの項目として`a line of sample'が入り、 バッファには`This is text.'が残ります。 (空白が2個残っていることに注意。 これらはM-SPCM-qで一掃できる。)

同じようにテキストをキルするもう1つの方法は、 M-b M-bで後向きに2語移動してから、 C-u M-dで前向きに4語キルします。 こうしても、バッファとキルリングの中身は、 先の例とまったく同じ結果になります。 M-f M-f C-u M-DELとしても、 後向きに同じテキストをキルします。 これでもやはり同じ結果が得られます。 キルリングの項目内のテキストの順序は、 キルするまえのバッファ内での順序と同じです。

キルコマンドと最後のキルコマンドのあいだに (単なる数引数ではない)他のコマンドが入ると、 キルリングには新たな項目が作られます。 しかし、キルコマンドを打つ直前に コマンドC-M-wappend-next-kill)を打っておけば、 既存の項目へ追加するように強制できます。 C-M-wは、つぎがキルコマンドであれば、 新たな項目を作成するかわりにキルしたテキストを 以前にキルしたテキストに付け加えるよう指示します。 C-M-wを使うことで、 まとめて1か所にヤンクできるように、 離れた場所にあるいくつかのテキスト断片をキルして集めておけます。

M-wに続くキルコマンドでは、 M-wがキルリングにコピーしたテキストには付け加えません。

以前にキルしたテキストのヤンク

直前にキルしたものではないテキストを取り出すには、 M-yコマンド(yank-pop)を使います。 M-yは、直前にヤンクしたテキストを それ以前にキルしたテキストで置き換えます。 たとえば、最後から2つめのキルテキストを取り出すには、 まずC-yで最後にキルしたテキストをヤンクしてから、 M-yで1つまえのものに置き換えます。 M-yC-yや他のM-yの直後でしか使えません。

キルリング内の項目を指す『最終ヤンク』ポインタを考えると、 M-yの動作を理解しやすいでしょう。 キルするたびに、『最終ヤンク』ポインタは、 リングの先頭に新たに作られた項目を指します。 C-yは、『最終ヤンク』ポインタが指す項目をヤンクします。 M-yは、『最終ヤンク』ポインタを別の項目へ移動し、 それに合わせてバッファのテキストを変更します。 M-yコマンドを繰り返せばリング内のどの項目へもポインタを移動できるので、 どの項目でもバッファに取り込めます。 ポインタがリングの最後に達すると、 つぎのM-yはポインタをふたたびリングの先頭の項目に移動します。

M-yは、リング内で『最終ヤンク』ポインタを移動しますが、 リング内の項目の順番を変えることはありません。 つねに、最後にキルしたものが先頭にあり、 記録に残っている最古のものが最後尾にあります。

M-yには数引数を指定できて、 『最終ヤンク』ポインタをいくつ進めるかを指定します。 負の引数では、ポインタをリングの先頭に向けて移動します。 リングの先頭からは最後の項目へ移動し、そこから先頭に向けて移動します。

目的のテキストがバッファに入ったならば、 M-yコマンドの繰り返しを止めれば、みつけたテキストが残ります。 そのテキストはキルリングの項目のコピーなので、 バッファ内で編集してもリング内の項目は変わりません。 新たにキルしない限り、『最終ヤンク』ポインタは キルリング内の同じ場所を指していますから、 C-yを繰り返すと、 直前に取り込んだものと同じキル内容のコピーをヤンクできます。

目的のテキストを引き出すのに M-yコマンドを何回使えばよいのかわかっている場合には、 数引数を指定してC-yを使えば、 一発で目的のテキストをヤンクできます。 C-yに数引数を指定すると、 キルリング内でその個数分だけ遡った項目のテキストを取り込みます。 たとえば、C-u 2 C-yは最後から2番目にキルしたテキストを取り込みます。 つまり、C-y M-yとするのと等価です。 数引数を指定したC-yは、『最終ヤンク』ポインタの場所から 数え始め、ヤンクする項目にポイントを移動します。

キルリングの長さは、変数kill-ring-maxで制御します。 この個数以上のキルテキストは保存しません。

キルリングの実際の内容は、kill-ringという名前の変数に入っています。 キルリングの全内容は、コマンドC-h v kill-ringで見ることができます。

テキストの蓄積

通常、テキストをコピーしたり移動したりするにはキルとヤンクで行います。 しかし、一塊のテキストを何か所にもコピーしたり、 多くの箇所に分散したテキストを1か所にコピーしたりするのに 便利な方法が他にもあります。 一塊のテキストを何か所にもコピーするには、 そのテキストをレジスタに保存します(see section レジスタ)。 ここでは、何か所かに分散したテキストをバッファやファイルに 蓄積するためのコマンドを説明します。

M-x append-to-buffer
リージョンを指定したバッファの内容の末尾に付加する。
M-x prepend-to-buffer
リージョンを指定したバッファの内容の先頭に付加する。
M-x copy-to-buffer
リージョンを指定したバッファにコピーするが、 そのバッファの古い内容は削除する。
M-x insert-buffer
指定したバッファの内容をカレントバッファのポイント位置に挿入する。
M-x append-to-file
リージョンを指定したファイルの内容の末尾に付加する。

テキストをバッファに蓄積するには、M-x append-to-bufferを使います。 これは、バッファ名を読み取り、 リージョンのコピーを指定したバッファに挿入します。 存在しないバッファを指定した場合、 append-to-bufferはバッファを作成します。 テキストは、そのバッファ内のポイント位置に挿入されます。 バッファを編集用に使っている場合には、 そのバッファ内のテキストのあいだ、 その時点のポイント位置にコピーしたテキストを挿入します。

コピー先のバッファ内では、ポイントはコピーされたテキストの末尾に置かれます。 したがって、連続してappend-to-bufferを使うと、 コピーした順序でバッファにテキストが蓄積されます。 厳密には、append-to-bufferは、 バッファ内の既存のテキストに追加するとは限りません。 そのバッファの末尾にポイントがある場合に限り、追加します。 しかし、バッファを変更するコマンドがappend-to-bufferだけならば、 ポイントはつねに末尾に置かれています。

M-x prepend-to-bufferappend-to-bufferにとてもよく似ていますが、 コピー先のバッファ内のポイントは、 コピーしたテキストの直前に置かれる点が異なります。 つまり、続けてこのコマンドを使うと、 テキストは逆順に追加されていきます。 M-x copy-to-bufferも同様ですが、 指定したバッファ内の既存のテキストを削除します。 したがって、バッファには新たにコピーしたテキストだけが残ります。

別のバッファに蓄積したテキストを取り出すには、 コマンドM-x insert-bufferを使います。 このコマンドも引数としてbuffernameを必要とします。 バッファbuffername内のテキストのコピーを 選択しているバッファに挿入します。 あるいは、そのバッファを選択して編集し、 場合によってはキルしてそのバッファからテキストを移動することもできます。 バッファに関する背景情報は、See section 複数のバッファの使い方

テキストをEmacsのバッファに蓄積するかわりに、 M-x append-to-fileを使って、テキストを直接ファイルに追加できます。 このコマンドは引数としてfilenameを必要とします。 リージョンのテキストを指定したファイルの末尾に追加します。 ファイルはディスク上でただちに更新されます。

このコマンドに指定するファイルは、 Emacsで訪問していないファイルだけに限るべきです。 Emacsで編集中のファイルを指定すると、 Emacsに隠れてファイルを変更することになり、 編集内容の一部を失うことにもなりかねません。

矩形領域

矩形領域コマンドはテキストの矩形領域を操作します。 矩形領域のテキストとは、 2つの行の範囲内にある2つの桁位置のあいだにある文字すべてを指します。 矩形領域をキルする、キルした矩形領域をヤンクする、 矩形領域をクリアする、矩形領域を空白やテキストで充填する、 矩形領域を削除する、といったコマンドがあります。 矩形領域コマンドは、複数段に組んだテキストを操作したり、 テキストをそのように組んだり戻したりする場合に便利です。

コマンドで操作する矩形領域を指定するには、 一方の隅にマークを設定し、その対角にポイントを置きます。 このように設定した矩形領域を矩形リージョン (region-rectangle)と呼びます。 というのも、リージョンの制御と似た方法で矩形領域を制御できるからです。 しかし、ポイントとマークの組は、それを使うコマンドに依存して、 リージョンとして解釈される、あるいは、 矩形領域として解釈されることに注意してください。

ポイントとマークが同じ桁位置にある場合、 それらが切り分ける矩形領域は空です。 同じ行上にある場合は、矩形領域の高さは1行です。 桁と行の扱い方が非対称であるのは、 ポイント(同様にマーク)は2つの桁のあいだにあるのに対し、 行ではその中にあるからです。

C-x r k
矩形リージョンのテキストをキルし、 その内容を『最後にキルした矩形領域』として保存する(kill-rectangle)。
C-x r d
矩形リージョンのテキストを削除する(delete-rectangle)。
C-x r y
最後にキルした矩形領域をポイント位置を左上隅としてヤンクする (yank-rectangle)。
C-x r o
空白で埋めた矩形リージョンを挿入する(open-rectangle)。 矩形リージョンの直前の内容は右に押しやられる。
M-x clear-rectangle
矩形リージョンのすべてのテキストを空白で置き換えて、 内容をクリアする。
M-x delete-whitespace-rectangle
指定した矩形領域の各行において、 矩形領域の左端から白文字を削除する。
C-x r t string RET
指定した矩形領域の各行にstringを挿入する (string-rectangle)。

矩形操作は2種類に分類できます。 矩形領域を削除したり挿入したりするコマンドと、 空白の矩形領域を扱うコマンドです。

矩形領域内のテキストを消すには、2つの方法があります。 テキストを捨てる(削除する)か、 『最後にキルした』矩形領域として保存するかです。 これらの機能を実現するコマンドは、C-x r ddelete-rectangle)と C-x r kkill-rectangle)です。 どちらも、矩形領域の内側にある各行の部分を削除し、 それより右側にテキストがあれば、 隙間を埋めるようにそれらを左へ移動します。

矩形領域の『キル』は普通の意味でのキルではない、 ということに注意してください。 矩形領域はキルリングには保存されませんが、 最後にキルした矩形領域を1つだけ記録できる特別な場所に保存されます。 というのは、矩形領域をヤンクすることは、 線形のテキストのヤンクとは大きく異なり、 特別なヤンクコマンドが必要だったり、 ヤンクしたテキストの入れ換え操作が意味をなさなかったりするからです。

最後にキルした矩形領域をヤンクするには、 C-x r yyank-rectangle)と打ちます。 矩形領域のヤンクは矩形領域のキルの逆です。 ポイントは矩形領域の左上隅の位置を指定します。 その場所には矩形領域の1行目が挿入され、 矩形領域の2行目はそのつぎの行にというように挿入されます。 影響される行数は、保存されている矩形領域の高さで決まります。

矩形領域のキルとヤンクを使うと、1段組みの一覧表を2段組の一覧表に変換できます。 一覧表の後半を矩形領域としてキルして、 一覧表の第1行の隣にヤンクすればよいのです。

また、C-x r r rC-x r i rを使えば、 矩形領域をレジスタにコピーしたり、レジスタから矩形領域をコピーしたりできます。 See section レジスタに矩形領域を保存する

空白の矩形領域を作るコマンドは2つあります。 M-x clear-rectangleは既存のテキストを空白で置き換え、 C-x r oopen-rectangle)は空白の矩形領域を挿入します。 矩形領域をクリアすることは、 矩形領域を削除してから同じ大きさの空白の矩形領域を挿入するのと同じことです。

コマンドM-x delete-whitespace-rectangleは、 特定の桁位置から始まる横に並んだ白文字を削除します。 矩形領域内の各行に作用し、桁位置は矩形領域の左端です。 矩形領域の右端はこのコマンドには関係ありません。

コマンドC-x r tM-x string-rectangle)は、 矩形領域を指定した文字列で置き換えます。 文字列の幅は、矩形領域の幅と同じである必要はありません。 文字列の幅が足りなければ、矩形領域の右側にあるテキストは左へ移動します。 文字列の幅が広ければ、矩形領域の右側にあるテキストは右へ移動します。


Go to the first, previous, next, last section, table of contents.