Emacs文件编辑历史记录

时间:2012-05-10 22:07:44

标签: emacs diff

是否有emacs扩展程序在编辑文件时定期拍摄快照(每分钟一次,每次x键击一次),类似于Eclipse中的更改历史记录或Google文档和其他程序中的编辑历史记录?

我希望有一些东西可以让我轻松浏览我日复一日的变化 - 有没有这样的东西已经写好了?

修改

我应该更具体 - 我不是在寻找VCS。我正在寻找一个小模式或类似的东西我可以打开并拥有磁盘上的修订版本的硬拷贝。

4 个答案:

答案 0 :(得分:5)

有一个称为自动保存的内置功能,可在N次击键后保存(可能在M秒之后,我不确定)。如果Emacs崩溃,我通常会使用它,而不是查看我所做的编辑;撤消更好。这是我的配置:

(setq autosave-dir (concat user-emacs-directory "autosaves/")
      auto-save-list-file-prefix (concat emacs-persistence-directory
                                         "autosave-list"))
(if (not (file-exists-p autosave-dir))
    (make-directory autosave-dir t))
(add-to-list 'auto-save-file-name-transforms
             `("\\`/?\\([^/]*/\\)*\\([^/]*\\)\\'" ,(concat autosave-dir "\\2") t))
;; tramp autosaves
(setq tramp-auto-save-directory (concat user-emacs-directory "tramp-autosaves/"))
(if (not (file-exists-p tramp-auto-save-directory))
    (make-directory tramp-auto-save-directory))

还有一个备份系统,可以在每次保存后创建副本(不是自动保存)。我将此用于我认为您要求的内容 - 查看自上次VCS提交以来的历史记录。这是我的配置:

(setq make-backup-files t
      vc-make-backup-files t
      version-control t
      kept-new-versions 256
      kept-old-versions 0
      delete-old-versions t
      backup-by-copying t)
(setq backup-dir (concat user-emacs-directory "backup/"))
(if (not (file-exists-p backup-dir))
    (make-directory backup-dir))
(add-to-list 'backup-directory-alist
             `(".*" . ,backup-dir))
(defun force-backup-of-buffer ()
  (setq buffer-backed-up nil))
(add-hook 'before-save-hook 'force-backup-of-buffer)
;; this is what tramp uses
(setq tramp-backup-directory-alist backup-directory-alist)

(add-to-path "backup-walker")
(autoload 'backup-walker-start "backup-walker"
  "start walking with the latest backup" t)

我使用优秀的backup-walker来浏览备份。

答案 1 :(得分:4)

如果您真的很重视保留更改,我强烈建议您开始使用git。它适用于您的Windows和Linux编码环境。我用它来代码来回移植代码。它可以很好地修复所有小行结尾和合并变化。

如果您真的希望它保留旧版本,那么emacs可以在您每次保存时创建新备份。它只是在您当前的文件旁边创建另一个文件。这样,您就可以控制进行新备份的频率(每次保存时)。

这是一个讨论选项的好页面:

ftp://ftp.gnu.org/pub/old-gnu/Manuals/emacs-20.7/html_chapter/emacs_18.html#SEC109

答案 2 :(得分:3)

我找到的最佳解决方案是undo-tree,这是与vim的gundo相当的Emacs:它让您可视化撤消/重做树,浏览更改并返回不同版本之间。

可以使用ELPA安装

undo-tree;安装完成后,将以下内容添加到.emacs

(require 'undo-tree)
(global-undo-tree-mode)

然后可以使用 Ctrl - x u undo-tree-visualize)显示撤消树。可以使用箭头键以非常直观的方式导航不同的“版本”。

使用undo-tree-save-history也可以使历史记录持久。

答案 3 :(得分:1)

尝试http://www.emacswiki.org/emacs/BackupEachSave

它让我多次拯救了我。