[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsの数多くのコマンドは、カレントバッファの任意の連続領域を操作します。 このようなコマンドに操作対象となるテキストを指定するには、 その一方の端にマーク(mark)を置き、 もう一方の端にポイントを移動します。 ポイントとマークに挟まれたテキストをリージョン(region)と呼びます。 暫定マーク(transient-mark)モードをオンにすると、 リージョンが存在すれば Emacsはつねにそのリージョンを強調表示します (see 節 H.2 暫定マークモード(transient-markモード) (2005/03/20))。
ある種の Emacs コマンドはマークを設定します.他の編集コマンドはマークに影響を及 ぼしませんから,マークは最後につけた位置のまま残ります.Emacs のバッファはそれぞ れ個々にマークを保存しています.そして,あるバッファでマークを行っても,他のバッ ファのマークには影響しません.以前に選択していたあるバッファに戻ると,以前と同じ 場所のままの位置にマークはあります.
リージョンの終わりはいつもポイントとマークです.どちらが先に置かれたかやどちらが テキストの先頭近くにあるかは問題ではありません――リージョンは(どちらが先であろ うと)ポイントかマークで始まり,(どちらが後にこようと)ポイントかマークで終わるの です.ポイントを動かすかマークを新しい場所につけると,リージョンが変わります.
C-y(yank
)やM-x insert-bufferなどのテキストを 挿入するコマンドの多くは、挿入したテキストの両端にポイントとマークを置いて、 挿入したテキストがリージョンに含まれるようにします。
リージョンの境界を定めること以外に、 あとで戻る可能性のある箇所を覚えておくためにもマークを使えます。 この機能をより使いやすくするために、 各バッファでは、それまでに設定した16個のマーク位置を マークリング(mark ring)に記録しています。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
マークを設定するコマンドはつぎのとおりです。
set-mark-command
)。exchange-point-and-mark
)。mouse-save-then-kill
)。たとえば、コマンドC-x C-u(upcase-region
)を使って、 バッファのある部分をすべて大文字に変換したいとしましょう。 このコマンドは、リージョン中のテキストに作用します。 まず、大文字に変換したいテキストの先頭に移動し、 C-SPCと打ってマークを設定します。 続いてテキストの終端に移動してC-x C-uと打ちます。 あるいは、先にテキストの終端にマークを設定して、 テキストの始点に移動してからC-x C-uと打ちます。
マークを設定するもっとも一般的な方法は、 C-SPCコマンド(set-mark-command
)を使うことです。 このコマンドは、ポイント位置にマークを設定します。 そうすれば、マークを置いたままで、ポイントを移動できます。
マウスを使ったマークの設定方法は2つあります。 テキストのある範囲でマウスボタン1をドラッグします。 マウスボタンを離した位置にポイントが置かれ、 ドラッグを開始した箇所にマークが設定されます。 あるいは、マウスボタン3をクリックします。 これは(C-SPCと同様に)ポイント位置にマークを設定してから、 ポイントを(Mouse-1のように)移動します。 両者は、マークを設定するだけでなく、リージョンをキルリングにコピーします。 これは、他のウィンドウアプリケーションの動作と一貫性を持たせるためです。 キルリングを変更したくなければ、 キーボードコマンドを使ってマークを設定する必要があります。 See 節 Q.1 編集用マウスコマンド。
普通の端末にはカーソルは1つしかありませんから、 Emacsにはマークを置いた位置を表示する術はありません。 ユーザーがその位置を覚えておく必要があります。 この問題に対する通常の解決方法は、マークを設定したら、 忘れてしまうまえにただちにそれを利用することです。 あるいは、C-x C-x(exchange-point-and-mark
)コマンドを使って、 マーク位置を確認します。 このコマンドは、ポイント位置にマークを置き、 マークのあった位置にポイントを置きます。 リージョンの範囲は変わらずに、 カーソルとポイントは以前マークのあった箇所に移動します。 暫定マーク(transient-mark)モードでは、 このコマンドはマークを再度活性にもします。
ポイント位置を変えずに、 リージョンのもう一方の端(マークの位置)を移動させたい場合にも、 C-x C-xは便利な方法です。 まず、C-x C-xでポイントをリージョンの一方の端に移して、 その端を移動します。 必要ならば、2回C-x C-xを使って新しい位置にマークを置き、 ポイントをもとの位置に戻します。
以前につけたマークへ行けるようにする機能については,H.6 マークリング (2005/03/20) を参照してく ださい.
There is no such character as C-SPC in ASCII; when you type SPC while holding down CTRL, what you get on most ordinary terminals is the character C-@. This key is actually bound to set-mark-command
. But unless you are unlucky enough to have a terminal where typing C-SPC does not produce C-@, you might as well think of this character as C-SPC. Under X, C-SPC is actually a distinct character, but its binding is still set-mark-command
. ASCII には、C-SPCという文字は存在しません。 CTRLを押し下げながらSPCを打つと、 ほとんどの普通の端末では文字C-@になります。 このキーは、実際にset-mark-command
にバインドしてあります。 ただし、幸運にもC-SPCでC-@を送出する端末を 使っているのであれば、 C-@をC-SPCとみなしてかまいません。 Xウィンドウシステムでは、C-SPCは実際には 別の文字として認識されますが、 そのバインドはやはりset-mark-command
です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
カラー表示が可能な端末では, Emacsはカレントリージョンを強調表示できます。 ただし、通常はリージョンを強調表示しません。 なぜでしょうか?
あるバッファで,いったんマークを設定してしまうと、 そのバッファ内にはつねにリージョンが存在することになります.これは,すべ てのコマンドはマークを設定し,リージョンをアクティブにするが,リージョンを無効に するものは何もないからです.リージョンを強調表示し続けても迷惑なだけでしょう.だ から,通常,Emacs はマウスで選択した直後しかリージョンを強調表示しません.
もしリージョンの強調表示を望むのであれば,暫定マーク(transient-mark)モードをオ ンにすることで可能になります.暫定マーク(transient-mark)モードは、 リージョンがいつもそれを使うまでの一時的にしか『存続』しない、通常よりきびしい操作モードです。 ユーザーは、リージョンを使うコマンドごとに明示的にリージョンを設定する必要があります。 暫定マーク(transient-mark)モードでは、 ほとんどの期間、リージョンは存在しません。 それゆえ、リージョンが存在するときにリージョンを強調表示しても 役立ちますし,邪魔になりません。暫定モードが有効の時,Emacs はリージョンがあれば いつもリージョンを強調表示します.
暫定マーク(transient-mark)モードをオンにするには、 M-x transient-mark-modeと打ちます。 このコマンドはモードのオン/オフを切り替えますから、 モードをオフにしたいときには同じコマンドを使うことができます.
暫定マーク(transient-mark)モードの詳細を以下に示します。
set-mark-command
)と打つ。 この操作はマークを活性にし,リージョンの強調表示を開始します. ポイントを移動するたびに、 強調表示されたリージョンが広がったり狭まったりします。
exchange-point-and-mark
)を実行する。
リージョンの強調表示には、region
フェイスを使います。 このフェイスを変更すれば、リージョンの強調表示方法をカスタマイズできます。
複数のウィンドウで同じバッファを表示しているときには、 それぞれのウィンドウで別の部分を表示できます。 というのは、(マーク位置は共有されるが) 各ウィンドウごとに別々にポイントの値があるからです。 通常、選択されたウィンドウでのみ、 リージョンを強調表示します(see 節 P. 複数のウィンドウ (2004/03/23))。 しかし、変数highlight-nonselected-windows
にnil
以外を設定すると、 (暫定マーク(transient-mark)モードがオンであり、かつ、 ウィンドウのバッファのマークが活性である場合に限り) 各ウィンドウでそれぞれのリージョンを強調表示します。
暫定マーク(transient-mark)モードにおいて、 変数mark-even-if-inactive
がnil
以外であると、 マークが不活性であってもコマンドはマークやリージョンを利用できます。 通常の暫定マーク(transient-mark)モードと同様に、 リージョンが強調表示されたりされなかったりしますが、 強調表示されていなくてもマークが本当になくなることはありません。だから,今でもリー ジョンに対するコマンドを実行できるのです.
暫定マーク(transient-mark)モードは『zmacsモード』としても知られています。 というのも、MITのLispマシン上で動作していたZmacsエディタが 同じようにマークを扱っていたからです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
暫定マークモードを通常は使いたくないが,ちょっとの間だけ使いたいかもしれない.こ れを実現するためには,C-SPC C-SPC や C-u C-x C-x と入力 します.これらのコマンドでマークを設定したり,有効にすると,マークが不活性になる まで暫定マークモードが有効になります.
exchange-point-and-mark
) を数引数付きで実行し たものです).暫定マークモードの第二の機能は,リージョンが活性な時,いくつかの操作がリージョン に対して実行されるのです.もし暫定マークモードを使わないのであれば,一度設定した リージョンは決して不活性にはなりません.だから,これらのコマンドがリージョンに対 して操作を変える区別を付ける方法がないのです.暫定マークモードを一時的に有効にさ せることで,リージョンのみを対象に操作を行うことができるのです.
こうして,一時的に暫定マークモードを有効にすることで,リージョンがある間,強調表 示できます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
いったんリージョンを設定しマークを活性にすれば、 以下のようにリージョンを操作できます。
リージョン内のテキストを操作するコマンドの多くは、 その名前にregion
という単語を含みます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
単語、リスト、段落、ページといったテキストのまとまりに ポイントやマークを置くコマンドがあります。
mark-word
)。 このコマンドとつぎのコマンドはポイントを移動しない。mark-sexp
).mark-paragraph
)。mark-defun
)。mark-whole-buffer
)。mark-page
)。M-@(mark-word
)がつぎの語の末尾にマークを設定するのに対し、 C-M-@(mark-sexp
)はつぎのバランスした式の末尾にマークを設定します。 これらのコマンドは、M-fやC-M-fと同様に引数を扱います。もし,これらの コマンドを繰り返すとリージョンが拡張されます.例えば,C-u 2 M-@ か M-@ M-@ と入力すると,2単語がマークされます.
その他のコマンドは、ポイントとマークの両方を設定して、バッファ内で対象物を区切り ます。たとえば、M-h(mark-paragraph
)は、ポイントを囲むあるいはポイ ントに続く段落の先頭にポイントを移動し、その段落の末尾にマークを置きます (see 節 U.3 段落)。このようにリージョンを設定するので、段落全体を字下げした り、大文字小文字を変換したり、キルしたりできます。正の数引数付きで実行すると, M-h は続くパラグラフを指定した数だけマークします.-n の数引数 を付けると,M-h はカーソル位置から n 段落逆昇っただけの段落がマーク されます.最後の場合には,ポイントは段落の最後に移動します.M-h は M-@ や C-M-@ と同様にリージョンの拡張も行います.
C-M-h(mark-defun
)も同様に、現在の(あるいは,後続の)トップレベル定 義や関数定義の先頭にポイントを置き、その末尾にマークを置きます (@xref{Moving by Defuns}).(現在では,1つの式だけをマークしますが,繰り返すことで M-@ のよ うに,より多くの式をマークすることができます).C-x C-p(mark-page
) は、現在のページの先頭にポイントを置き、その末尾にマークを置きます (mark-page
)。マークはページ区切りの直後に設定され(リージョンに含まれ る)、一方、ポイントはページ区切りの直後に置かれます(リージョンに含まれない)。 数引数で、現在のページのかわりに(正ならば)後続のページや、(負ならば)先行する ページを指定できます。
最後に紹介するC-x h(mark-whole-buffer
)は、 バッファ全体にリージョンを設定します。 つまり、ポイントをバッファの先頭に置き、 マークをバッファの末尾に置きます。
暫定マーク(transient-mark)モードでは、 これらのコマンドはすべて、マークを活性にします。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
マークには、リージョンを区切る以外にも、 あとで戻る可能性のある箇所を記録するという便利な使い方があります。 この機能をより便利にするために、 各バッファでは以前の16箇所のマーク位置を マークリング(mark ring)に記録しています。 マークを設定するコマンドは、古いマークをこのマークリングに入れます。 マークを設定していた箇所に戻るには、 C-u C-SPC(またはC-u C-@)を使います。 これは、set-mark-command
コマンドに数引数を指定したものです。 このコマンドは、マークがあった箇所にポイントを移動し、 それ以前のマークを収めたマークリングからマークを復元します。
C-u C-SPC に続けて C-SPC を繰り返すと, マークリング上にある過去のマークのすべてを1つ1つ遡って移動できます。 このように辿ったマーク位置は、マークリングのうしろに付け加えられるので、 なくなってしまうことはありません。
各バッファには独自のマークリングがあります。 すべての編集コマンドは、カレントバッファのマークリングを使います。 特に、C-u C-SPCは、つねに同じバッファに留まります。
M-<(beginning-of-buffer
)のような長距離を 移動するコマンドの多くは、まずマークを設定して、 古いマークをマークリングに保存してから動作を開始します。 このようにして、あとで簡単に戻れるようにしておきます。 探索コマンドは、ポイントを移動するときにはマークを設定します。 コマンドがマークを設定したかどうかは、 エコー領域に`Mark set'と表示されるのでわかります。
何度も同じ場所に戻りたい場合には、マークリングでは不十分でしょう。 このような場合には、あとで使うために位置情報をレジスタに記録できます (see 節 Saving Positions in Registers)。
変数mark-ring-max
は、マークリングに保存する最大項目数を指定します。 すでに多くの項目が存在していて、さらにもう1つ押し込むときには、 リスト内の最も初期の項目を捨てます。 C-u C-SPCを繰り返し実行すると、 いまマークリングに入っている位置を巡回することになります。
変数mark-ring
は、最新のマーカオブジェクトを先頭にして、 マーカオブジェクトのリストとしてマークリングを保持します。 この変数は各バッファにローカルです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
個々のバッファごとの普通のマークリングに加えて、 Emacsにはグローバルマークリング(global mark ring)が1つあります。 グローバルマークリングは、最近マークを設定したバッファの系列を記録しますから、 それらのバッファに戻ることができます。
マークを設定すると、つねにカレントバッファのマークリングに項目を作ります。 マークを設定した以降にバッファを切り替えていると、 新しくマークを設定するとグローバルマークリングにも項目を作成します。 その結果、グローバルマークリングには訪れていたバッファの系列が記録され、 各バッファではマークを設定した箇所が記録されます。
コマンドC-x C-SPC(pop-global-mark
)は、 グローバルマークリングの最新の項目が示すバッファの位置に移動します。 グローバルマークリングも巡回されるので、 C-x C-SPCを繰り返し使用すると、 1つずつまえのバッファに移動できます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
バッファからテキストを消しさるコマンドのほとんどは、 そのテキストをキルリングにコピーしておくので、 バッファの他の部分にそのテキストを移動したりコピーしたりできます。 これらのコマンドを、キル(kill)コマンドと呼びます。 それ以外の『テキストを消すコマンド』は、 テキストをキルリングに保存しません。 これらを削除(delete)コマンドと呼びます。 (両者を区別するのは、バッファ内のテキストを消す場合だけ。) キルコマンドや削除コマンドを誤って実行してしまった場合には、 C-x u(undo
)コマンドを使って、もとに戻すことができます。
読み込み専用のテキストは変更ができませんので,キルすることはできません.しかし, 実際には変更しないで,読み込み専用のテキストをコピーするためにキルコマンドを使い たいこともあるでしょう.変数 kill-read-only-ok
を非n-nil
にしてお くと,キルコマンドは読み込み専用のバッファで特別な働きをします:つまり,テキスト を移動して,それをキルリングへコピーするのです.バッファから実際にテキストを削除 することはしません.この処理が実行されると,エコー領域にそのことが表示されます.
削除コマンドには、一度に1つの文字だけを削除する C-d(delete-char
)やDEL(delete-backward-char
)、 空白や改行だけを削除するコマンドがあります。 単純ではないデータをかなりの分量で破壊する可能性のあるコマンドは、 一般にキルを変わりに行います。 コマンド名や個々の説明では、そのコマンドがどちらの働きをするかによって、 `キル'(kill)と`削除'(delete)を使い分けています。
ウィンドウシステムでは,他のプログラムでコピーした時よりも新しければ,Emacs です 直前にコピーしたテキストが1番に選択されます.つまり,他のソフトで貼り付けを行う と,Emacsでキルしたテキストが貼り付けられるのです.
多くのウィンドウシステムでは,テキストが選択されている時に文字を入力すると選択さ れたテクストが削除されるという習わしがあります.M-x delete-selection-mode かカスタムで Delete Selection mode を有効にすることで, Emacs でもこのようなこと を実現できます.このモードを有効にすると,テキストを選択した状態で DEL や C-d,他のキーを押すと選択範囲全体が消去されます.このモードは Transient Mark mode (see 節 H.2 暫定マークモード(transient-markモード) (2005/03/20)) も有効にします.
H.8.1 削除 (2005/03/20) Commands for deleting small amounts of text and blank areas. H.8.2 行単位のキル (2005/03/20) How to kill entire lines of text at one time. H.8.3 他のキルコマンド (2005/03/20) Commands to kill large regions of text and syntactic units such as words and sentences.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
削除とはキルリングに保存することなくテキストを消すことです.ほとんどの場合, Emacs のコマンドは1文字だけや空白のみを削除します.
delete-char
)。もし,キーボードに Delete キー (大抵は編集用キーパッドにあります) があれば,Emacs はそのキーを delete-char
に割り当てます.delete-backward-char
)。いくつかのキーボードではこ のキーを"backspace key"と書かれ,左矢印が描かれています.delete-horizontal-space
)。just-one-space
)。delete-blank-lines
)。delete-indentation
)。 もっとも基本的な削除コマンドは、C-d(delete-char
)と DEL(delete-backward-char
)です。 C-dはポイントの直後の文字、 つまり、カーソルが重なっている文字を削除します。 このコマンドでは、ポイントは動きません。 DELはカーソルの直前の文字を削除して、 ポイントを1つまえに移動します。 バッファ内の他の文字と同様に、改行も削除できます。 改行を削除すると、2つの行が繋がります。 実際には、C-dとDELがつねに削除コマンドであるわけではありません。 引数を指定するとキルコマンドとなり、 同じ方法で2文字以上を消すことができます。
すべてのキーボードは DEL や BACKSPACE,BS,DELETE などと 印刷されたキーがあります.これらのキーは RET や ENTER キー上の近くに あり,大抵入力した文字を削除するのに使われます.実際の名前やキーによらず,Emacs ではどちらのキーも DEL と同じになるか,そうあるべきなのです.
多くのキーボード (標準的な PC のキーボードを含む) では BACKSPACE キー が RET や ENTER キーのすぐ上にあります.そして,DELETE キーがまた 別のところにあります.その場合,BACKSPACE キーは DEL として働き, DELETE キーは C-d と同じであるか,,そうあるべきなのです.
なぜ"そうあるべきなのです"と書いているのか? ウィンドウシステムで Emacs を起動す ると,どのキーが DEL と等価であるかを自動的に決定します.普通,結果として BACKSPACEと(か) DELETE をそのように決定します.しかし,うまくいかな い場合には Emacs はシステムから誤った情報を受け取ります.もし,これらのキーがす べき機能を果たしていなければ,どのキーを DEL として使うべきか設定する必要 があります.See 節 AE.8.1 DELで削除できない (2004/03/29) を参照してください.
大抵のテキスト端末では,Emacsは実際にどのキーがあるか判断できません.だから,あ なたのキーボードに合うかどうかに関わらず,標準的な設定が使われます.標準的な設定 とは,ASCII DEL キーは文字を削除し,ASCII BS (backspace) キーはヘルプ (C-hと同じ) になります.もし,ヘルプを表示する代 わりに前方へ削除すべきキーがあるといったように,あなたのキーボードで正しく動作し ていなければ,AE.8.1 DELで削除できない (2004/03/29) を参照してください.
他の削除コマンドは、空白、タブ、改行といった白文字だけを削除します。 M-\(delete-horizontal-space
)は、 ポイントの前後にあるすべての空白とタブ文字を削除します。 M-SPC(just-one-space
)も同様に削除しますが、 今ある空白の個数に関係なく(たとえ無かったとしても)、 ポイントの直後に空白を1個だけ残します。
C-x C-o(delete-blank-lines
)は、 現在行に続くすべての空行を削除します。 現在行が空行である場合には、(空行である現在行だけを残して) 先行する空行も同様にすべて削除します。
M-^(delete-indentation
)は、 改行とその周りの空白を削除して、 通常は空白を1個残して現在行と先行する行を繋げます。 See 節 M-^。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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-line
がnil
以外の場合、 行頭でC-kを使うと、行末の改行も含めて行全体をキルします。 この変数は、通常、nil
です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
kill-region
)。kill-word
)。 see 節 U.1 単語。backward-kill-word
)。backward-kill-sentence
)。 see 節 U.2 文。kill-sentence
)。kill-sexp
). @xref{Expressions}. see 節 V.2 リストとS式。zap-to-char
)。汎用的なキルコマンドといえばC-w(kill-region
)です。 このコマンドは、あらかじめ連続領域をポイントとマークで囲んでおけば、 どんな連続領域でもキルできます。
探索と組み合わせた便利なキルの仕方もあります。 M-z(zap-to-char
)は1文字を読み取り、 ポイントからバッファ内でその文字がつぎに現れる箇所までを (その文字も含めて)キルします。 数引数を指定した場合は、反復回数を意味します。 負の引数の場合は、ポイント位置から逆方向に探索し、 ポイントの直前までをキルします。
他の構文単位でもキルできます。 M-DELやM-d(see 節 U.1 単語)で単語を、 C-M-k(@xref{Expressions})で括弧で囲まれた式を、 C-x DELやM-k(see 節 U.2 文)で文をキルできます。
読み出し専用のバッファでもキルできます。 実際にはバッファに変更を加えることはありませんし、 ベルを鳴らしてその旨警告を発しますが、 キルしようとしたテキストはキルリングにコピーされます。 ですから、別のバッファにそのテキストをヤンクできます。 ほとんどのキルコマンドは、 このようにコピーするテキストを越えてポイントを進めますから、 連続してキルコマンドを実行しても キルリングに入る項目は通常どおり1個だけです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ヤンク(yank)とは、 以前にキルしたテキストをバッファにふたたび挿入することです。 他のシステムでは『ペースト』と呼ぶこともあります。 テキストを移動したりコピーしたりする普通の方法は、 そのテキストをいったんキルしてから、別の場所に(1回以上)ヤンクすることです。
yank
)。yank-pop
)。kill-ring-save
)。append-next-kill
)。ウィンドウシステムでは,Emacs でテキストをキルした時よりも後に,他のソフトでコピー したテキストがあると,C-y はEmacs でキルされたテキストの代わりに,他のソフ トでコピーしたテキストを貼り付けます.
H.9.1 キルリング (2005/03/20) Where killed text is stored. Basic yanking. H.9.2 キルしたテキストの追加 (2005/03/20) Several kills in a row all yank together. H.9.3 以前にキルしたテキストのヤンク (2005/03/20) Yanking something killed some time ago.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
すべてのキルされたテキストは、キルされたテキストの塊をリストとする キルリング(kill ring)に記録されています。 キルリングはたった1つしかなくて、すべてのバッファで共有しています。 ですから、あるバッファでキルしたテキストは、 別のバッファでヤンクできます。 普通、このようにして、あるファイルから別のファイルへテキストを移動します。 (別の方法については、see 節 H.10 テキストの蓄積 (2005/03/20)。)
コマンドC-y(yank
)は、 最後にキルしたテキストをふたたび挿入します。 カーソルは挿入したテキストの末尾に置かれます。 マークは挿入したテキストの先頭に置かれます。 See 節 H. マークとリージョン (2005/03/20)。
C-u C-yは、テキストのまえにカーソルを置き、うしろにマークを置きます。 引数としてC-uだけを指定した場合に限り、こうなります。 C-uと数字を含めた他の引数を指定すると、 いくつまえのキル内容をヤンクするかを意味します(see 節 H.9.3 以前にキルしたテキストのヤンク (2005/03/20))。
ヤンクすると,ヤンクされたテキストからある種のテキストプロパティは削除されます. このことは,混乱を起こすかもしれません.例えば,マウスやある種のキーに反応するテ キストプロパティが無効になるなど.変数 yank-excluded-properties
は削除す べきプロパティを決定します.レジスタや矩形領域のヤンクでもこれらの削除が起こりま す.
一塊のテキストをコピーする場合は、 M-w(kill-ring-save
)を使うとよいでしょう。 このコマンドは、バッファからリージョンをキルせずに、 リージョンをキルリングにコピーします。 このコマンドは、C-wに続けてC-x uを実行するのとほぼ同等ですが、 M-wはアンドゥ履歴を変更しませんし、一時的にせよ画面表示も変わりません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
通常、各キルコマンドは、キルリングに新たな項目を押し込みます。 しかし、連続したキルコマンドでは、 それぞれでキルしたテキストを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.'が残ります。 (空白が`is' と`text' の間に2個残っていることに注意。 これらはM-SPCやM-qで一掃できる。)
同じようにテキストをキルするもう1つの方法は、 M-b M-bで後向きに2語移動してから、 C-u M-dで前向きに4語キルします。 こうしても、バッファとキルリングの中身は、 先の例とまったく同じ結果になります。 M-f M-f C-u M-DELとしても、 後向きに同じテキストをキルします。 これでもやはり同じ結果が得られます。 キルリングの項目内のテキストの順序は、 キルするまえのバッファ内での順序と同じです。
キルコマンドと最後のキルコマンドのあいだに (単なる数引数ではない)他のコマンドが入ると、 キルリングには新たな項目が作られます。 しかし、キルコマンドを打つ直前に コマンドC-M-w(append-next-kill
)を打っておけば、 既存の項目へ追加するように強制できます。 C-M-wは、つぎがキルコマンドであれば、 新たな項目を作成するかわりにキルしたテキストを 以前にキルしたテキストに付け加えるよう指示します。 C-M-wを使うことで、 まとめて1か所にヤンクできるように、 離れた場所にあるいくつかのテキスト断片をキルして集めておけます。
M-wに続くキルコマンドでは、 M-wがキルリングにコピーしたテキストには付け加えません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
直前にキルしたものではないテキストを取り出すには、 M-yコマンド(yank-pop
)を使います。 M-yは、直前にヤンクしたテキストを それ以前にキルしたテキストで置き換えます。 たとえば、最後から2つめのキルテキストを取り出すには、 まずC-yで最後にキルしたテキストをヤンクしてから、 M-yで1つまえのものに置き換えます。 M-yはC-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に数引数を指定すると、 最も最近のものを1として,そこからキルリング内で遡って数えた項目のテキストを取り込みます。 たとえば、C-u 2 C-yは最後から2番目にキルしたテキストを取り込みます。 つまり、C-y M-yとするのと等価です。 数引数を指定したC-yは、『最終ヤンク』ポインタの場所から 数え始め、ヤンクする項目にポイントを移動します。
キルリングの長さは、変数kill-ring-max
で制御します。 この個数以上のキルテキストは保存しません。
キルリングの実際の内容は、kill-ring
という名前の変数に入っています。 キルリングの全内容は、コマンドC-h v kill-ringで見ることができます。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
通常、テキストをコピーしたり移動したりするにはキルとヤンクで行います。 しかし、一塊のテキストを何か所にもコピーしたり、 多くの箇所に分散したテキストを1か所にコピーしたりするのに 便利な方法が他にもあります。 一塊のテキストを何か所にもコピーするには、 そのテキストをレジスタに保存します(see 節 I. レジスタ)。 ここでは、何か所かに分散したテキストをバッファやファイルに 蓄積するためのコマンドを説明します。
テキストをバッファに蓄積するには、M-x append-to-bufferを使います。 これは、バッファ名を読み取り、 リージョンのコピーを指定したバッファに挿入します。 存在しないバッファを指定した場合、 append-to-buffer
はバッファを作成します。 テキストは、そのバッファ内のポイント位置に挿入されます。 バッファを編集用に使っている場合には、 そのバッファ内のテキストのあいだ、 その瞬間にあったポイント位置にコピーしたテキストを挿入します。
コピー先のバッファ内では、ポイントはコピーされたテキストの末尾に置かれます。 したがって、連続してappend-to-buffer
を使うと、 コピーした順序でバッファにテキストが蓄積されます。 厳密には、append-to-buffer
は、 バッファ内の既存のテキストに追加するとは限りません。 そのバッファの末尾にポイントがある場合に限り、追加します。 しかし、バッファを変更するコマンドがappend-to-buffer
だけならば、 ポイントはつねに末尾に置かれています。
M-x prepend-to-bufferはappend-to-buffer
にとてもよく似ていますが、 コピー先のバッファ内のポイントは、 コピーしたテキストの直前に置かれる点が異なります。 つまり、続けてこのコマンドを使うと、 テキストは逆順に追加されていきます。 M-x copy-to-bufferも同様ですが、 指定したバッファ内の既存のテキストを削除します。 したがって、バッファには新たにコピーしたテキストだけが残ります。
別のバッファに蓄積したテキストを取り出すには、 コマンドM-x insert-bufferを使います。 このコマンドも引数としてbuffernameを必要とします。 バッファbuffername内の全テキストのコピーを 現在バッファのポイント位置に挿入し,挿入されたテキストの後にマークを置きます. あるいは、そのバッファを選択して編集し、 場合によってはキルしてそのバッファからテキストを移動することもできます。 バッファに関する背景情報は、See 節 O. 複数のバッファの使い方 (2004/07/16)。
テキストをEmacsのバッファに蓄積するかわりに、 M-x append-to-fileを使って、テキストを直接ファイルに追加できます。 このコマンドは引数としてfilenameを必要とします。 リージョンのテキストを指定したファイルの末尾に追加します。 ファイルはディスク上でただちに更新されます。
このコマンドに指定するファイルは、 Emacsで訪問していないファイルだけに限るべきです。 Emacsで編集中のファイルを指定すると、 Emacsに隠れてファイルを変更することになり、 編集内容の一部を失うことにもなりかねません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
矩形領域コマンドはテキストの矩形領域を操作します。 矩形領域のテキストとは、 2つの行の範囲内にある2つの桁位置のあいだにある文字すべてを指します。 矩形領域をキルする、キルした矩形領域をヤンクする、 矩形領域をクリアする、矩形領域を空白やテキストで充填する、 矩形領域を削除する、といったコマンドがあります。 矩形領域コマンドは、複数段に組んだテキストを操作したり、 テキストをそのように組んだり戻したりする場合に便利です。
コマンドで操作する矩形領域を指定するには、 一方の隅にマークを設定し、その対角にポイントを置きます。 このように設定した矩形領域を矩形リージョン (region-rectangle)と呼びます。 というのも、リージョンの制御と似た方法で矩形領域を制御できるからです。 しかし、ポイントとマークの組は、それを使うコマンドに依存して、 リージョンとして解釈される、あるいは、 矩形領域として解釈されることに注意してください。
ポイントとマークが同じ桁位置にある場合、 それらが切り分ける矩形領域は空です。 同じ行上にある場合は、矩形領域の高さは1行です。 桁と行の扱い方が非対称であるのは、 ポイント(同様にマーク)は2つの桁のあいだにあるのに対し、 行ではその中にあるからです。
kill-rectangle
)。delete-rectangle
)。yank-rectangle
)。open-rectangle
)。 矩形リージョンの直前の内容は右に押しやられる。clear-rectangle
)。string-rectangle
)。矩形操作は2種類に分類できます。 矩形領域を削除したり挿入したりするコマンドと、 空白の矩形領域を扱うコマンドです。
矩形領域内のテキストを消すには、2つの方法があります。 テキストを捨てる(削除する)か、 『最後にキルした』矩形領域として保存するかです。 これらの機能を実現するコマンドは、C-x r d(delete-rectangle
)と C-x r k(kill-rectangle
)です。 どちらも、矩形領域の内側にある各行の部分を削除し、 それより(もしいくらかでも)右側にテキストがあれば、 隙間を埋めるようにそれらを左へ移動します。
矩形領域の『キル』は普通の意味でのキルではない、 ということに注意してください。 矩形領域はキルリングには保存されませんが、 最後にキルした矩形領域を1つだけ記録できる特別な場所に保存されます。 というのは、矩形領域をヤンクすることは、 線形のテキストのヤンクとは大きく異なり、 特別なヤンクコマンドが必要だったり、 ヤンクしたテキストの入れ換え操作が意味をなさなかったりするからです。
最後にキルした矩形領域をヤンクするには、 C-x r y(yank-rectangle
)と打ちます。 矩形領域のヤンクは矩形領域のキルの逆です。 ポイントは矩形領域の左上隅の位置を指定します。 その場所には矩形領域の1行目が挿入され、 矩形領域の2行目はそのつぎの行で同じ列だが1行下がった場所に挿入されるといった具合 です. 影響される行数は、保存されている矩形領域の高さで決まります。
矩形領域のキルとヤンクを使うと、1段組みの一覧表を2段組の一覧表に変換できます。 一覧表の後半を矩形領域としてキルして、 一覧表の第1行の隣にヤンクすればよいのです。
また、C-x r r rやC-x r i rを使えば、 矩形領域をレジスタにコピーしたり、レジスタから矩形領域をコピーしたりできます。 See 節 Rectangle Registers。
空白の矩形領域を作るコマンドは2つあります。 C-x r c (M-x clear-rectangle
) は既存のテキストを空白で置き換え、 C-x r o(open-rectangle
)は空白の矩形領域を挿入します。 矩形領域をクリアすることは、 矩形領域を削除してから同じ大きさの空白の矩形領域を挿入するのと同じことです。
コマンドM-x delete-whitespace-rectangleは、 特定の桁位置から始まる横に並んだ白文字を削除します。 矩形領域内の各行に作用し、桁位置は矩形領域の左端です。 矩形領域の右端はこのコマンドには関係ありません。
コマンドC-x r t(string-rectangle
)は、 矩形領域を指定した文字列で置き換えます。 文字列の幅は、矩形領域の幅と同じである必要はありません。 文字列の幅が足りなければ、矩形領域の右側にあるテキストは左へ移動します。 文字列の幅が広ければ、矩形領域の右側にあるテキストは右へ移動します。
M-x string-insert-rectangle は string-rectangle
と似ていますが,元 のテキストを右にシフトしてから,各行に文字を挿入します.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |