2012-02-26 67 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