ほとんどのオペレーティングシステムでは、ファイルを上書きすると、そのファイルに以前どのような内容が含まれていたかという記録がすべて自動的に消去されます。そのため、Emacsからファイルを保存すると、ファイルの旧内容は破棄されます—もっとも、実際に保存する前に、Emacsが旧内容をバックアップファイルと呼ばれる別のファイルに慎重にコピーするため、そのままでは破棄されてしまうのです。
Emacsがファイルのバックアップを作成するのは、そのファイルを参照しているバッファから初めて保存したときのみです。その後何度ファイルを保存しても、バックアップはそのまま保持されます。ただし、バッファを終了してから再度そのファイルを参照すると、新しいバックアップファイルが作成されます。
ほとんどのファイルにおいて、変数 make-backup-files
がバックアップファイルを作成するかどうかを決定します。ほとんどのオペレーティングシステムでは、そのデフォルト値は t となっており、Emacs はバックアップファイルを作成します。
バージョン管理システム(バージョン管理を参照)で管理されているファイルの場合、変数 vc-make-backup-files でバックアップファイルを作成するかどうかが決定されます。デフォルトでは
nil
となっており、これはバージョン管理システムに過去のすべてのバージョンを保存している場合、バックアップファイルは冗長になるためです。全般オプションを参照してください。
Emacsでは、ファイルごとに単一のバックアップを保持するか、編集したファイルごとに番号付きのバックアップファイルを複数作成するかを選択できます。単一または番号付きのバックアップを参照してください。
backup-enable-predicate 変数の既定値により、temporary-file-directory または small-temporary-file-directory
で指定された一時ファイル用ディレクトリ内のファイルについては、バックアップファイルが書き出されないようになります。
バッファが以前に保存済みであっても、Emacsに別のバックアップファイルを作成するよう明示的に指示できます。C-u C-x C-s でバッファを保存すると、再度保存した際に、その際に保存されたバージョンがバックアップファイルとして作成されます。C-u C-u C-x C-s はバッファを保存しますが、その前に以前のファイル内容を新しいバックアップファイルとして作成します。C-u C-u C-u C-x C-s はその両方を行います。つまり、以前の内容からバックアップを作成し、再度保存した際に新しく保存された内容から別のバックアップを作成するように設定します。
変数 backup-directory-alist
をカスタマイズすることで、特定のパターンに一致するファイルを特定のディレクトリにバックアップするように指定できます。典型的な使い方としては、要素
("." . dir)
を追加して、すべてのバックアップを絶対名 dir のディレクトリに作成することが挙げられます。Emacs
は、異なるディレクトリに由来する同名のファイル間で競合が起きないよう、バックアップファイル名を変更します。あるいは、("." . ".~")
を追加すれば、元のファイルのディレクトリにある不可視のサブディレクトリ .~
にバックアップを作成できます。Emacs は、必要に応じてバックアップ作成用のディレクトリを作成します。