次: Basic Files, 前: Erasing, 上: Basic
バッファのテキストに対する変更は、ある時点まで遡って、
すべてアンドゥ(もとに戻すことが)できます。
各バッファでは個々の変更をそれぞれ記録していて、
アンドゥコマンドは、つねにカレントバッファに作用します。
通常、各編集コマンドはアンドゥ記録に別々の項目を作成しますが、
query-replace
のようなコマンドは一度に多くの項目を作りますし、
自己挿入文字のように非常に単純なコマンドは、
もとに戻すのを単純にするために、まとめられます。
undo
)。
変更をもとに戻すには、コマンド、C-x uやC-_を使います。 始めにこのコマンドを実行すると、直前の変更をもとに戻します。 ポイントは、もとに戻されたコマンドを実行するまえの位置に戻ります。
C-_やC-x uを連続して実行すると、 アンドゥ情報の限界に達するまで、 次々に以前の変更をもとに戻していきます。 記録されているすべての変更をもとに戻してしまうと、 アンドゥコマンドはその旨エラーメッセージを表示します。
アンドゥコマンド以外の他のコマンドを実行すると、 アンドゥコマンドの連続実行系列が断ち切られます。 これ以後、これよりまえのアンドゥコマンドの実行自体が、 もとに戻すことが可能な一般の変更として扱われます。 したがって、もとに戻してしまった変更をやはりそのとおりに 変更しておきたい場合には、 C-fと打つか、あるいは、無害なコマンドを実行して アンドゥの連続実行系列を断ち切ってから、さらにアンドゥコマンドを打ちます。
普通のアンドゥは、カレントバッファにおけるすべての変更に作用します。
カレントリージョン内に制限した選択的なアンドゥ(selective undo)を
行うこともできます。
これには、リージョンを設定してから、数引数(値は関係ない)を指定して
undo
コマンドを、つまり、C-u C-x uやC-u C-_を実行します。
これにより、リージョン内のもっとも最近の変更がもとに戻ります。
同じリージョン内の変更をさらにもとに戻すには、
undo
コマンドを繰り返します(これには数引数は必要ない)。
暫定マーク(transient-mark)モードでは、
リージョンが活性のときにundo
を使うと選択的なアンドゥを行います。
つまり、数引数は必要ありません。
バッファを誤って変更してしまった場合、 もとに戻すもっとも簡単な方法は、モード行の先頭部分から星印が 消えるまでC-_を繰り返し打つことです。 そうすれば、すべての修正を取り消したことになります。 アンドゥコマンドによりモード行から星印が消えた場合はつねに、 バッファの内容がファイルを訪問したときと同じであるか、 最後に保存したときと同じであることを意味します。
意図してバッファを変更したかどうかあやふやなときは、 一度だけC-_を打ちます。 もとに戻すことで最後の変更箇所がわかりますから、 それが意図した変更かどうか判断できるでしょう。 意図した変更でなければ、もとに戻したままにしておきます。 意図した変更であったなら、上記の方法で変更し直します。
すべてのバッファでアンドゥ情報を記録するわけではありません。 空白で始まる名前のバッファでは記録しません。 これらのバッファは、 Emacsやその拡張部分が内部的に使用するもので、 ユーザーが通常見たり編集したりしないテキストを保持しています。
単なるカーソル移動はアンドゥできません。 バッファの内容を変更したときだけアンドゥ情報が保存されます。 ただし、いくつかのカーソル移動コマンドはマークを設定しますから、 これらのコマンドをときどき使えば、 マークリング(see Mark Ring)から取り出しながら、 通ってきたそれぞれの箇所へ戻ることができます。
バッファに関するアンドゥ情報が大きくなると、
Emacsはもっとも古いアンドゥ情報から順に(ガベッジコレクション中に)
破棄していきます。
保持すべきアンドゥ情報の量を指定するには、
2つの変数undo-limit
とundo-strong-limit
を設定します。
これらの変数の値は、保存領域のバイト数です。
変数undo-limit
は緩い限界(soft limit)を設定します。
Emacsは、このサイズに達するまでのコマンド分のアンドゥデータを保持します。
データ量がこのサイズを超える場合もありますが、
このデータ量を超えるような古いコマンド分のデータは保持しません。
デフォルトは、20000です。
変数undo-strong-limit
は、厳密な限界(stricter limit)を設定します。
この量を超えるデータに対応するコマンドのデータは破棄します。
初期値は30000です。
これらの変数の値に関わらず、最新の変更を破棄することはありませんので、 意図しない大きな変更を加えてしまった直後に ガベッジコレクションが発生しても、 その変更をアンドゥできないというようなことはありません。
アンドゥコマンドを実行するキーがC-x uとC-_と2つある理由は、 1文字キーにするほど重要なのですが、どうやってC-_を打つか自明でない キーボードもあるからです。 C-x uは、どの端末でも素直に打てる代替手段なのです。