web-dev-qa-db-ja.com

Emacsがバックアップファイルを作成する方法を制御するにはどうすればよいですか?

Emacsはfoo~という名前のバックアップファイルをどこにでも配置しますが、それらを削除することを覚えておく必要はありません。また、ファイルシステム内のどこかにハードリンクがあるファイルを編集すると、編集が完了したときにハードリンクがバックアップを指しているため、混乱してひどくなります。これらのバックアップファイルを削除するか、同じディレクトリ以外の場所に移動させるにはどうすればよいですか?

312
jfm3

Emacsのバックアップファイルで保存したことがあるなら、おそらくもっと少なくしたいのではなく、もっと多くしたいでしょう。編集しているファイルと同じディレクトリに移動するのは面倒ですが、変更は簡単です。次のようなものを.emacsに入れることで、すべてのバックアップファイルをディレクトリに入れることができます。

(setq backup-directory-alist `(("." . "~/.saves")))

Emacsがバックアップファイルを作成する方法に関連する難解な詳細がいくつかあります。オリジナルの名前を変更し、編集したバッファを書き出す必要がありますか?オリジナルがリンクされている場合はどうなりますか?一般的に、最も安全であるが最も遅い方法は、常にコピーしてバックアップを作成することです。

(setq backup-by-copying t)

何らかの理由で遅すぎる場合は、backup-by-copying-when-linkedも参照してください。

現在、バックアップはすべて独自の場所にあるため、より少ないバックアップではなく、より多くのバックアップが必要になる場合があります。これらの変数(C-h vを使用)については、Emacsのドキュメントをご覧ください。

(setq delete-old-versions t
  kept-new-versions 6
  kept-old-versions 2
  version-control t)

最後に、バックアップファイルが絶対に必要ない場合:

(setq make-backup-files nil)

しかし、それを考えると気分が悪くなります。

494
jfm3

Emacsのバックアップ/自動保存ファイルは非常に役立ちます。しかし、これらの機能は混乱を招きます。

バックアップファイル

バックアップファイルの末尾にはチルダ(~または~9~)があり、ユーザーのホームディレクトリに書き込まれます。 make-backup-filesが非nilの場合、Emacsは、ファイルがバッファから最初に保存されるときに、元のファイルのバックアップを自動的に作成します。新しいファイルを編集している場合、Emacsは2回目のファイル保存時にバックアップを作成します。

ファイルを何度保存しても、バックアップは変更されません。バッファを削除してからファイルに再度アクセスした場合、または次に新しいEmacsセッションを開始したときに、新しいバックアップファイルが作成されます。新しいバックアップは、再オープン後、または編集セッションの開始時にファイルのコンテンツを反映します。ただし、既存のバックアップに再び触れることはありません。そのため、番号付きバックアップを作成すると便利です(以下の構成を参照)。

バックアップを明示的に作成するには、save-bufferC-x C-s)とプレフィックス引数を明示的に使用します。

diff-backupおよびdired-diff-backupは、ファイルとそのバックアップを比較します。ただし、バックアップファイルを復元する機能はありません。たとえば、Windowsで、バックアップファイルを復元するには

C:\Users\USERNAME\.emacs.d\backups\!drive_c!Users!USERNAME!.emacs.el.~7~

手動でコピーする必要があります

C:\Users\USERNAME\.emacs.el

ファイルの自動保存

自動保存ファイルはハッシュマーク(#)を使用し、プロジェクトディレクトリ内に(実際のファイルとともに)ローカルに書き込まれます。その理由は、自動保存ファイルは、ファイルを再度保存するまで(急いで服従する場合など)Emacsが作成する単なる一時ファイルであるためです。

  • ユーザーがC-x C-ssave-buffer)を押してファイルを保存する前に、キーストロークのカウント(auto-save-interval)に基づいて、または入力を停止したときに(auto-save-timeout)Emacsファイルを自動保存します。
  • Emacsは、シェルコマンドでEmacsジョブを強制終了するなど、クラッシュするたびに自動保存します。

ユーザーがファイルを保存すると、自動保存されたバージョンは削除されます。しかし、ユーザーがファイルを保存せずに終了した場合、EmacsまたはXセッションがクラッシュした場合、自動保存されたファイルはまだ存在します。

revert-bufferまたはrecover-fileを使用して、自動保存ファイルを復元します。 Emacsは、〜/ .emacs.d/auto-save-listという名前のファイルに、後で回復するために中断されたセッションを記録することに注意してください。 recover-session関数はこの情報を使用します。

自動保存されたフィールドから回復するための推奨される方法は、M-x revert-buffer RETです。 Emacsは、「バッファは最近自動保存されました。自動保存ファイルから元に戻しますか?」または「ファイルFILENAMEからバッファを元に戻しますか?」。後者の場合、自動保存ファイルはありません。たとえば、別のauto-save-intervallキーストロークを入力する前に保存したため、その場合、Emacsは自動保存ファイルを削除しました。

自動保存は、低速のマシンに接続すると編集が遅くなる可能性があり、多くのファイルに機密データが含まれるため、デフォルトでは現在無効になっています。

構成

ここに私見が最もよく機能する設定があります:

(defvar --backup-directory (concat user-emacs-directory "backups"))
(if (not (file-exists-p --backup-directory))
        (make-directory --backup-directory t))
(setq backup-directory-alist `(("." . ,--backup-directory)))
(setq make-backup-files t               ; backup of a file the first time it is saved.
      backup-by-copying t               ; don't clobber symlinks
      version-control t                 ; version numbers for backup files
      delete-old-versions t             ; delete excess backup files silently
      delete-by-moving-to-trash t
      kept-old-versions 6               ; oldest versions to keep when a new numbered backup is made (default: 2)
      kept-new-versions 9               ; newest versions to keep when a new numbered backup is made (default: 2)
      auto-save-default t               ; auto-save every buffer that visits a file
      auto-save-timeout 20              ; number of seconds idle time before auto-save (default: 30)
      auto-save-interval 200            ; number of keystrokes between auto-saves (default: 300)
      )

機密データ

別の問題は、機密データを含むファイルのコピーをEmacsに広めたくないことです。ファイルごとに このモード を使用します。これはマイナーモードなので、目的のためにsensitive-minor-modeと名前を変更しました。

すべての。vcfおよび。gpgファイルに対して有効にするには、.emacsで次のようなものを使用します。

(setq auto-mode-alist
      (append
       (list
        '("\\.\\(vcf\\|gpg\\)$" . sensitive-minor-mode)
        )
       auto-mode-alist))

または、一部の。txtファイルなどの一部のファイルのみを保護するには、次のような行を使用します

// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-

ファイル内。

65

受け入れられた答え は良いですが、everyでさらにバックアップすることで大幅に改善できますversionedファイル

まず、 受け入れられた回答 で説明されている基本設定。

(setq version-control t     ;; Use version numbers for backups.
      kept-new-versions 10  ;; Number of newest versions to keep.
      kept-old-versions 0   ;; Number of oldest versions to keep.
      delete-old-versions t ;; Don't ask to delete excess backup versions.
      backup-by-copying t)  ;; Copy all files, don't rename them.

次に、バージョン管理されたファイルもバックアップします。これは、Emacsがデフォルトでは実行しません(保存するたびにコミットしませんか?):

(setq vc-make-backup-files t)

最後に、最初の保存だけでなく、保存ごとにバックアップを作成します。 2種類のバックアップを作成します。

  1. セッションごとのバックアップ:各Emacsセッションでのバッファーのfirst保存時に1回。これらはEmacのデフォルトのバックアップ動作をシミュレートします。

  2. 保存ごとのバックアップ:1回every save。 Emacsはデフォルトではこれを行いませんが、Emacsを長時間実行したままにしておくと非常に便利です。

バックアップは別の場所に配置されます とEmacsは、バックアップディレクトリが存在しない場合は自動的に作成します:

;; Default and per-save backups go here:
(setq backup-directory-alist '(("" . "~/.emacs.d/backup/per-save")))

(defun force-backup-of-buffer ()
  ;; Make a special "per session" backup at the first save of each
  ;; emacs session.
  (when (not buffer-backed-up)
    ;; Override the default parameters for per-session backups.
    (let ((backup-directory-alist '(("" . "~/.emacs.d/backup/per-session")))
          (kept-new-versions 3))
      (backup-buffer)))
  ;; Make a "per save" backup on each save.  The first save results in
  ;; both a per-session and a per-save backup, to keep the numbering
  ;; of per-save backups consistent.
  (let ((buffer-backed-up nil))
    (backup-buffer)))

(add-hook 'before-save-hook  'force-backup-of-buffer)

Makefile$<の代わりに$@を記述した後、前回のコミットの約3時間後にこのトピックに非常に興味を持ちました:P

上記は 私が頻繁に編集したEmacs Wikiページ に基づいています。

58
ntc2

バックアップオプションを構成する別の方法は、カスタマイズインターフェースを使用することです。入る:

M-x customize-group

そして、Customize group:プロンプトでbackupと入力します。

バッファの一番下までスクロールすると、Backup Directory Alistが表示されます。 値の表示をクリックし、リストの最初のエントリを次のように設定します。

Regexp matching filename: .*
Backup directory name: /path/to/your/backup/dir

または、バックアップを私の設定からオフにして、バックアップファイルを作成してoffにすることもできます。

Emacsが.emacsファイルを自動的に編集したくない場合は、 カスタマイズファイルを設定 にする必要があります。

31
Dave Webb

あなたはそれらを完全に無効にすることができます

(setq make-backup-files nil)
29
Paweł Hajdan