Next: , Previous: , Up: Files   [Contents][Index]


18.4 バッファーのリバート

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

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

リバートはバッファーをnot modified(変更されていない)とマークします。また、バッファーのundoヒストリーもクリアーされます(Undoを参照してください)。したがってリバートはundoできません。再び気を変えても、undoコマンドを使ってリバートした変更を元にもどすことはできません。

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

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

Emacsにバッファーを定期的にリバートするよう、指示することもできます。特定のバッファーにたいしてこれを行うには、M-x auto-revert-modeとタイプして、マイナーモードのAuto-Revertモードを有効にします。これは現在のバッファーを5秒ごとに自動的にリバートします。リバートの間隔はauto-revert-intervalで変更できます。すべてのバッファーにたいして同じことを行うには、M-x global-auto-revert-modeとタイプして、Global Auto-Revertモードを有効にします。これらのマイナーモードはリモートのファイルにたいするチェックやリバートはしません。なぜならそれは通常とても遅いからです。この動作は、変数auto-revert-remote-filesを非nilにセットすることにより変更できます。

Auto-Revertモードの1つの使い方は、システムログのようなファイルを“tail”することです。これにより、それらのファイルにたいする、他のプログラムによる変更を、継続的に表示できます。これを行うには、ポイントをバッファーの最後に移動します。そうすればファイル内容が変更されても、ポイントはその位置に留まります。しかし、ファイルがファイルの終端方向に向かって変更されるだけだと確信できるときは、かわりにAuto-Revert Tailモード(auto-revert-tail-mode)を使います。このモードは、これをより効果的に行います。Auto-Revert Tailモードは、リモートのファイルにたいしても機能します。

バッファーが自動リバートされたとき、メッセージが生成されます。これはauto-revert-verboseを非nilにセットすることにより、抑制できます。

バージョンコントロールシステムの下にあるファイルを、以前のバージョンにリバーとするコマンドについては、VC Undoを参照してください。バージョンコントロールシステムの下にあるファイルをvisitしているときの自動リバートの特性については、VC Mode Lineを参照してください。