矩形コマンドは、テキストの矩形領域(特定の列ペア間、かつ特定の行範囲にあるすべての文字)を対象とします。Emacsには、矩形領域をキルしたり、キルした矩形領域をヤンクしたり、クリアしたり、空白やテキストで埋めたり、あるいは削除したりするコマンドが用意されています。矩形コマンドは、多段組形式のテキストを扱う際や、テキストをそのような形式に変換・解除する際に有用です。
コマンドの対象とする矩形を指定するには、一方の角にマークを置き、対角の角にポイントを置きます。このように指定された矩形をリージョン矩形と呼びます。ポイントとマークが同じ列にある場合、リージョン矩形は空になります。同じ行にある場合、リージョン矩形は1行分の高さになります。
領域矩形は、領域とほぼ同様の方法で制御されます。ただし、点とマークの値の特定の組み合わせは、それを使用するコマンドに応じて、領域としても矩形としても解釈され得る点に注意してください。
矩形領域はマウスでも指定できます。矩形の一方の角から対角の角まで C-M-mouse-1 をクリックしてドラッグしてください。
領域矩形のテキストを消去し、その内容を最後に消去した矩形(kill-rectangle)として保存する。
領域矩形のテキストを最後に消去した矩形(copy-rectangle-as-kill)として保存する。
領域矩形のテキスト (delete-rectangle) を削除します。
左上隅が点 (yank-rectangle) にある、最後に殺された長方形をヤンクせよ。
リージョン矩形 (open-rectangle)
の領域を埋めるために空白を挿入します。これにより、リージョン矩形のそれまでの内容が右に押し出されます。
領域矩形(rectangle-number-lines)の左端に沿って行番号を挿入します。これにより、領域矩形内のそれまでの内容が右に押し出されます。
領域矩形内のすべての内容をスペース (clear-rectangle) に置き換えてクリアする。
指定された矩形上の各行について、矩形の左端の列から順に空白を削除してください。
各行の矩形の内容を string に置き換える (string-rectangle)。
長方形の各行に string を挿入してください。
矩形マークモード (rectangle-mark-mode)
の切り替え。このモードが有効な間は、領域矩形がハイライトされて縮小・拡大でき、標準的なキルおよびヤンクコマンドがこれに適用されます。
矩形操作は、矩形の消去や挿入を行うコマンドと、空白の矩形を作成するコマンドの2種類に分けられる。
矩形内のテキストを消去する方法は2通りあります。C-x r d (delete-rectangle) でテキストを完全に削除するか、C-x r
k (kill-rectangle) でテキストを削除して最後に消去された矩形として保存するかです。いずれの場合も、領域矩形を消去することは、その矩形の各行にある指定されたテキストを消去することと同じです。その行に後続のテキストがある場合は、空白を埋めるように後方に移動します。
矩形をキルすることは、通常の意味でのキルではありません。矩形はキルリングではなく、直近にキルされた矩形のみを記録する特別な場所に格納されます。これは、矩形をヤンクすることが線形テキストをヤンクすることとは大きく異なるため、それぞれ異なるヤンクコマンドを使用する必要があるからです。矩形に対してヤンクポップは定義されていません。
C-x r M-w (copy-rectangle-as-kill) は矩形における M-w に相当するもので、バッファからテキストを削除することなく、その矩形を最後に破棄された矩形として記録します。
最後に削除した矩形をヤンクするには、C-x r y (yank-rectangle)
と入力します。矩形の1行目はポイントに挿入され、2行目はそれより1行下の同じ水平位置に挿入され、以降も同様に続きます。影響を受ける行数は、保存された矩形の高さによって決まります。
例えば、1列のリスト2つを2列のリストに変換するには、一方の1列リストを矩形としてキルし、もう一方のリストの横にヤンクします。
また、C-x r r r と C-x r i r を使用して、レジスタへの矩形のコピーやレジスタからの矩形のコピーを行うこともできます。レジスタへの矩形の保存を参照してください。
空白の矩形を作成するには、2つのコマンドが利用できます。C-x r c (clear-rectangle) は領域矩形内の既存のテキストを空白にし、C-x r o (open-rectangle)
は空白の矩形を挿入します。
M-x delete-whitespace-rectangle は、特定の列から始まる水平方向の空白を削除します。これは矩形内の各行に適用され、列は矩形の左端で指定されます。矩形の右端はこのコマンドに影響しません。
コマンド C-x r N (rectangle-number-lines) は、領域矩形の左端に沿って行番号を挿入します。通常、番号は
1(矩形の1行目)から始まります。接頭辞引数を指定すると、このコマンドは開始番号と、番号を出力するためのフォーマット文字列の入力を求めます(The Emacs Lisp Reference Manual の Formatting
Strings を参照してください)。
コマンド C-x r t (string-rectangle)
は、領域矩形の内容を各行の文字列で置き換えます。文字列の幅は、矩形の幅と同じである必要はありません。文字列の幅が狭い場合は、矩形以降のテキストが左にずれ、文字列が矩形より広い場合は、矩形以降のテキストが右にずれます。
コマンド M-x string-insert-rectangle は string-rectangle と同様ですが、各行に文字列を挿入し、元のテキストを右にずらします。
コマンド C-x SPC (rectangle-mark-mode)
は、リージョン矩形と標準リージョンのどちらをハイライトするかを切り替えます(必要に応じて、まずリージョンを有効にします)。このモードが有効な場合、リージョンのサイズを変更するコマンド(C-f、C-n
など)は矩形単位で処理され、キルやヤンクもこの矩形に対して行われます。テキストのキルと移動 を参照してください。このモードは、リージョンが有効な間のみ持続します。
リージョン矩形は、マークが有効な場合にのみ機能します。特に、一時マークモードがオフの場合(一時マークモードの無効化を参照)、C-x SPC を入力するだけでなく、マークを有効にする必要があります。
標準領域とは異なり、領域矩形の角はバッファの終端を超えて延びたり、通常はポインタが進入できない空白領域(TAB文字の途中など)にまで入り込んだりすることがあります。
リージョンがアクティブな状態(マークとリージョンを参照)で、かつ矩形マークモードの場合、C-x
C-x はリージョン矩形の4つの頂点を順に移動するコマンド rectangle-exchange-point-and-mark
を実行します。これは、マークされたテキストに対して操作を行う前に、リージョン矩形の寸法を変更したい場合に便利です。