自動保存は通常、visitしているファイルへの保存はしません。なぜなら永続化したくない変更を保存するのは、好ましくないからです。そのかわりに、自動保存はauto-saveファイルと呼ばれる別のファイルに保存し、visitしているファイルへの変更は、保存を明示的に要求したとき(C-x C-sなど)に行います。
auto-saveファイルの名前は通常、visitしているファイル名の前後に‘#’をつけて作られます。したがってfoo.cというファイルをvisitしているバッファーは、#foo.c#というファイルに自動保存されます。ファイルをvisitしていないバッファーのほとんどは、明示的に要求した場合だけ自動保存されます。それらのバッファーが自動保存されるとき、auto-saveファイル名は、バッファー名の前後に‘#’をつけて、その後ろに数字と文字を付け加えて一意な名前にします。たとえば送信メッセージを作成する*mail*バッファーは、#*mail*#704juuのような名前のファイルに、自動保存されます。Emacsの一部(関数make-auto-save-file-name
およびauto-save-file-name-p
)を違った方法で再プログラムしない限り、auto-saveファイル名はこの方法で作成されますバッファーの自動保存に使われるファイル名は、そのバッファーの自動保存をオンにしたときに計算されます。
変数auto-save-file-name-transforms
は、auto-saveファイル名をある程度制御することを許します。これに一連の正規表現を指定して置換することにより、auto-saveファイル名を変更します。デフォルト値は、リモートのファイル(リモートファイルを参照してください)を、ローカルマシンの一時ディレクトリーのauto-saveファイルに変換します。
大きなバッファーから大量のテキストを削除したとき、そのバッファーにたいする自動保存は一時的にオフになります。これは、もしテキストをうっかり削除してしまった場合、それがauto-saveファイルに含まれていて、そこから探せる方が便利だからです。これが発生した後、再び自動保存を有効にするには、バッファーをC-x C-sで保存するか、C-u 1 M-x auto-save-modeを使います。
別のauto-saveファイルではなく、visitしているファイル自体に自動保存したい場合は、グローバルなマイナーモードauto-save-visited-mode
を有効にします。このモードでは、自動保存は明示的な保存と等価です。このモードは上述のauto-save
と直交(orthogonal)するモードであり、両方同時に有効にできることに注意してください。しかし、いくつかのバッファーでauto-save
モードがアクティブで、かつ時代遅れのauto-save-visited-file-name
変数が非nil
値の場合、そのバッファーはauto-save-visited-mode
の影響を受けないでしょう。
auto-save-visited-mode
モードの自動保存処理の間隔は、変数auto-save-visited-interval
を使用してカスタマイズできます。auto-save-interval
とauto-save-timeout
は、auto-save-visited-mode
に影響を与えません。これらの変数の詳細は、自動保存の制御を参照してください。
バッファーのauto-saveファイルは、そのバッファーをvisitしているファイルに保存したとき削除されます(変数delete-auto-save-files
をnil
にセットすることにより、これを禁じることができます)。C-x
C-wまたはset-visited-file-name
で、visitされているファイル名を変更することにより、あたらしくvisitされているファイル名にもとづいてauto-saveファイル名はリネームされます。
バッファーをkillしても、デフォルトではそのバッファーのauto-saveファイルは削除されません。しかしkill-buffer-delete-auto-save-files
が非nil
なら、auto-saveをもつファイルのkillにおいて、Emacsがユーザーにauto-saveファイルを削除するかどうか問い合わせるようにできます(これはdelete-auto-save-files
がnil
なら抑制される)。