每次Emacs启动时如何创建.emacs的备份

时间:2012-02-26 02:33:11

标签: version-control emacs backup configuration-files

每次Emacs启动时,备份我的.emacs文件的好方法是什么?当我需要回到以前的版本时,我想保留多份副本。

我的第一个想法是从.emacs文件中发出一个shell命令:

cp ~/.emacs ~/Backups/.emacs-yyyymmdd:hhmmss

...附加当前时间戳以获取唯一的文件名。但据我所知,你不能从.emacs文件发出shell命令。

我读过有关BackupEachSaveForceBackups的文章。有没有人有这些经验?它们运作良好吗?

编辑:
Event_jr关于版本控制的答案是一种可能的解决方案。我更喜欢使用shell命令,因为版本控制适用于所有文件,我不需要对每个文件进行多次备份。

我看了'版本控制'变量。它是Emacs手册中的described

  

Emacs还可以制作编号的备份文件。编号的备份文件名包含'.~',>编号,以及原始文件名后的另一个'〜'。因此,eval.c>的备份文件会   被称为eval.c.~1~,eval.c.~2~,依此类推,一直通过eval.c.~259~>等名称。

     

变量版本控制确定是制作单个备份文件还是多个>编号的备份文件。

所以,我把它添加到我的.emacs:

; Version control and backups:
(setq version-control t)    

按宣传方式工作。

This section讲述了如何基于每个文件控制备份。我没有探究过它。

4 个答案:

答案 0 :(得分:7)

你应该问的问题是我怎么永远不会丢失我在Emacs中编辑的任何文件的修订版,包括〜/ .emacs?

答案是versiond backups。控制此功能的变量称为version-control,这有点令人困惑,因为它完全与备份相关,而不是VCS。

这也是Emacs的一个功能;没有额外的软件包可供安装。我工作的几乎所有东西都在VCS中,但我仍然觉得让我的工作的所有修改都很容易访问非常有用。存储是如此便宜,为什么不呢?

编辑:描述备份每个文件的save-buffer方面。

您应该阅读save-buffer的文档( Ch k Cx Cs )以了解细微差别,但基本上传递它 Cu Cu 会强制它进行备份每次保存后。我将其重新映射到我自己的功能

(defun le::save-buffer-force-backup (arg)
  "save buffer, always with a 2 \\[universal-argument]'s

see `save-buffer'

With ARG, don't force backup.
"
  (interactive "P")
  (if (consp arg)
      (save-buffer)
    (save-buffer 16)))
(global-set-key [remap save-buffer] 'le::save-buffer-force-backup)

答案 1 :(得分:2)

  

据我所知,你不能从.emacs文件发出shell命令。

当然可以:

(shell-command "cp ~/.emacs ~/.emacs-`date +%Y%m%d:%H%M`")

答案 2 :(得分:2)

更好的解决方案是使用像git这样的版本控制系统。如果您创建一个~/.emacs.d目录并将elisp文件放在那里会更容易:

mkdir ~/.emacs.d
mv .emacs ~/.emacs.d/init.el
git init
git add init.el
git commit -m 'initial checkin'

现在每次修改init.el文件时,您都可以使用以下内容保存更改:

git commit -a -m 'descriptive commit message here'

然后,您可以向after-save-hook添加一个功能,例如此gist to automatically add, commit, and push when files change。在推送之后,您将拥有本地副本和远程副本(例如,在github上)。

Emacs还通过名为magit的软件包与git集成。

如果您现在花时间学习如何使用DVCS (Distributed Version Control System),那么从长远来看,您将获得极大的回报,并且您会发现magit使得使用git非常方便。< / p>

答案 3 :(得分:0)

您将备份属性设置为配置;你可以参考here