Next: , Previous: , Up: ファイルの処理   [Contents][Index]


18.4 バッファーのリバート

ファイルをvisitしているバッファーにたいして、広範な変更をした後に気が変わったときは、リバート(revert: 復元)することにより。変更をファイルの保存されたバージョンに戻すことができます。これを行うにはC-x x gとタイプします。間違えてリバートしてしまうことによって大量の作業結果を失うこともあり得るので、バッファーが変更されているとEmacsは最初に確認を求めます。

revert-bufferコマンドは、ファイルが少ししか変更されていないときは、前にポイントがあったテキスト部分とだいたい同じ位置にポイントを置くよう試みます。しかし広範な変更を行っていた場合、ポイントは大きく異なる場所に置かれることになります。

リバートはバッファーをnot modified(変更されていない)とマークします。しかし、これはリバートされた変更を単一の変更として、そのバッファーのundoヒストリーに追加します(Undo(取り消し)を参照)。したがって、リバート後に気が変わってリバートされた変更を元に戻したくなった場合は、C-/またはそのエイリアスをタイプして、それを行うことができます。

より保守的にバッファーをリバートするためには、コマンドrevert-buffer-with-fine-grainを使用できます。このコマンドはrevert-bufferと同様に機能しますがバッファー内のすべてのマーカー、プロパティ、オーバーレイを保存するよう努めることにより、可能なかぎり非破壊的なリバートを試みます。この方法によるリバートは多数回の変更を行っている際には非常に低速になり得るので、この方法によるバッファーコンテンツ置き換えに要する最大秒数を指定するために変数revert-buffer-with-fine-grain-max-secondsを変更できます。これはrevert-buffer-with-fine-grainの実行全体がこれより長くならないことを保証するものではないことに注意してください。

ファイルに関連付けられていない、Diredバッファーのようなバッファーでも、リバートすることができます。それらの場合、リバートはその内容を再計算することを意味します。C-x bで明示的に作成したバッファーは、リバートできません。リバートを試みるとrevert-bufferはエラーを報告します。

自動的かつ頻繁に変更されるファイル、たとえば実行を続けるプロセスのログ出力などを編集しているとき、Emacsが確認なしにリバートできたら便利でしょう。このような振る舞いをさせるには、変数revert-without-queryに正規表現のリストをセットします。ファイル名がそれらの正規表現の1つにマッチしたとき、find-fileおよびrevert-bufferは、バッファーが変更されていないときは、ファイルが変更される度に自動的にリバートします(もしテキストを編集していた場合、変更を放棄するのはおそらく正しくありません)。

キーストロークC-x x gはコマンドrevert-buffer-quickにバインドされています。revert-bufferと異なるのは、カレントバッファーがファイルをvisitしていて、そのバッファーが未変更なら問い合わせを行わないことです。ユーザーオプションrevert-buffer-quick-short-answersにもしたがいます。このオプションが非nilなら、長いyes/noより短いy/nで問い合わせを行います。

visit中のファイルがディスク上で変更された際にバッファーを自動的にリバートするようにEmacsに指定できます。自動リバートーバッファーを自動的に最新に保つを参照してください。