Emacsでファイル保存時に作成されるバックアップファイルの保存先・バックアップファイル名のルールを設定し世代管理をする

前回、vimで書いたもののEmacs版。
Emacsで編集するファイルを自動的にバックアップし、世代管理するというもの。

設定方法は簡単で、以下の内容を「\~/.emacs.el」に記述する(ファイルが無ければ新規で作成する)。
なお、内容についてはこちらを参考…というか、日付の所をちょっと書き換えただけだ。

(setq make-backup-files t)               ; バックアップファイルを作成する
(setq backup-directory "~/.backup")      ; バックアップファイルの作成先を指定する
(if (and (boundp 'backup-directory)      ; バックアップファイル名に日付を追加する
         (not (fboundp 'make-backup-file-name-original)))
    (progn
      (fset 'make-backup-file-name-original
            (symbol-function 'make-backup-file-name))
      (defun make-backup-file-name (filename)
        (if (file-directory-p (expand-file-name backup-directory))
            (concat (expand-file-name backup-directory)
                    "/" (file-name-nondirectory filename) "~"
                        (format-time-string "%Y%m%d_%H%M%S") "~")
          (make-backup-file-name-original filename)))))

この設定でファイルを編集すると、「\~/.backup」というフォルダに、「ファイル名.タイムスタンプ」というファイル名でバックアップが取得される。

test@test-vm-ubuntu:~$ emacs test3
test@test-vm-ubuntu:~$ ls -la .backup
合計 16
drwxrwxr-x  2 test test 4096  4月 26 23:19 .
drwxr-xr-x 33 test test 4096  4月 26 23:19 ..
-rw-rw-r--  1 test test  264  4月 26 23:13 test3.20150426_231857~
-rw-rw-r--  1 test test  268  4月 26 23:18 test3.20150426_231905~
test@test-vm-ubuntu:~$

この他、 バックアップしたファイル名に日付は付かないが、以下のように設定する方法もある。
こちらは、このサイトを参考に作成した。

(setq make-backup-files t)       ; バックアップファイルを作成する。                                 
(setq backup-directory-alist     ; バックアップファイルの保存場所を指定。(バックアップ元ファイルのフルパスを「/」を「\」に変換する)
      (cons (cons "\\.*$" (expand-file-name "~/.backup"))
            backup-directory-alist))

(setq version-control t)         ; 複数のバックアップを残す
(setq kept-new-versions 5)       ; 残す世代を設定する
(setq delete-old-versions t)     ; 確認せずに古いバックアップを削除する
(setq vc-make-backup-files t)    ; バージョン管理下のファイルもバックアップを作成する

こちらの設定でファイルを編集すると、以下のように「バックアップファイル名.世代番号」というようになる。

test@test-vm-ubuntu:~$ emacs test3
test@test-vm-ubuntu:~$ ls -la .backup
合計 20
-rw-rw-r--  1 test test  311  4月 26 23:38 !home!test!test3.~1~
-rw-rw-r--  1 test test  317  4月 26 23:38 !home!test!test3.~2~
-rw-rw-r--  1 test test  322  4月 26 23:38 !home!test!test3.~3~
drwxrwxr-x  2 test test 4096  4月 26 23:38 .
drwxr-xr-x 33 test test 4096  4月 26 23:38 ..