2012-02-26 43 views
4

每次Emacs启动时,备份我的.emacs文件的好方法是什么?当我需要回到以前的版本时,我想保留多个副本。如何在每次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说明如何在每个文件的基础上控制备份。我没有探索过它。

+2

你可能要考虑保持你的.eamcs版本控制。很多人都这样做。 – Tom 2012-02-26 06:37:37

+2

“版本控制适用于所有文件”版本控制不适用于所有文件,只适用于您明确置于版本控制下的文件。版本控制软件简单地忽略那些不受其控制的文件。 – Tom 2012-02-26 13:20:43

+0

显然,“版本控制”和名为“版本控制”的变量是有区别的。如果设置了版本控制变量,则任何已更改的文件都将被编号备份。 – user11583 2012-02-27 16:00:10

回答

2

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

当然,您可以:

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

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

6

你真正应该问的是我怎么不会失去任何文件我编辑在Emacs修订,包括〜/的.emacs的问题?

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

这也是Emacs的一个特性;没有额外的安装包。几乎我所处理的所有内容都在VCS中,但我仍然发现将我的工作的所有修订轻松访问都非常有用。存储是如此便宜,为什么不呢?

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

你应该阅读文档(C-H K C的-X C-S)的save-buffer理解的细微差别,但基本上它传递C-ùC-ü会后,每保存强制备份。我actaully它重新映射到我自己的函数

(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) 
2

一个更好的解决方案是使用一个版本控制系统像git

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

现在每次修改​​文件,你可以使用以下方法来保存更改:

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

,如果你在那里创建一个~/.emacs.d目录,并把你的elisp文件,它会更容易然后你可以添加一个函数after-save-hook,比如像这样的主题to automatically add, commit, and push when files change。推后,你有一个本地副本和一个远程副本(例如在github上)。

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

如果您现在花时间学习如何使用DVCS (Distributed Version Control System),您将获得极大的回报,您会发现使用git可以非常方便地使用该magit。

+0

嗯。我看到了优点,但是当我如此小规模地运营时,听起来像是比它的价值更麻烦。 – user11583 2012-02-27 02:44:14

+0

起初它似乎总是这样......你会惊讶你的规模在你意识到之前会如何迅速增长。您现在花费在小规模学习这些工具上的时间将在以后需要处理更大的项目时获得丰厚的回报。即使在一个小规模,你会明白它有多大的帮助。我为每个新项目输入'git init'。如果您使用[magit](http://philjackson.github.com/magit/),则可以简化其余工作。 – aculich 2012-02-27 02:59:06

+1

Upvoting因为我同意,不过git(我也使用它)根本不是用户友好的VCS。它非常强大和灵活,但总的来说,我会有点小心,不要将VCS的新手指向它的方向。 (Magit *非常棒,帮助很大,但并没有涵盖所有情况)。尽一切办法试试(与Magit),看看你是否喜欢它,但也要意识到有更简单的选择。 – phils 2012-02-28 01:34:40