ファイルを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に指定できます。自動リバートーバッファーを自動的に最新に保つを参照してください。
Note that reverting a buffer turns on the major mode appropriate for
visiting the buffer’s file, as described in ファイルのモードを選択する. Thus, the
major mode actually turned on as result of reverting a buffer depends on
mode remapping, and could be different from the original mode if you
customized major-mode-remap-alist
in-between.