Emacs:保存文件时如何设置文件大小警告显着减少?

时间:2009-12-22 14:55:09

标签: emacs

我刚刚在文本文件中丢失了笔记的大部分内容,当我使用emacs时,有一个错误,但我忽略了错误消息,并强制保存文件。几个小时后,我发现我新保存的文件只剩下几个字节了!我在文件中的大部分笔记都已消失。

我希望在emacs中保存文件时,我已经设置了文件大小更改的警告。我以前在emacs之前看过这样的消息,但我不知道我现在怎么设置它?请与我分享指向解决方案的任何指针。最糟糕的是,应该可以在钩子中添加一些检查以保存文件以实现它。

提前致谢!

Yu Shen

2 个答案:

答案 0 :(得分:6)

根据您想要的警告类型,这可以解决您的问题。当前的增量为8M,显然您可以根据需要自定义。如果您想要更具侵入性的警告,可以取消注释'y-or-n-p,并删除该消息。

(defvar check-buffer-size-delta (* 8 1024 1024)
  "Delta in size over which the user will be warned when saving.")
(defun check-buffer-size-on-save ()
  "Warn user if buffer has changed by more than CHECK-BUFFER-SIZE-DELTA since last save"
  (let ((delta (abs (- (buffer-size) buffer-saved-size))))
    (when (> delta check-buffer-size-delta)
      (beep)
      ;; (y-or-n-p "WARNING: Buffer has changed by %d bytes since last save.  Do you know what you're doing? "
      (message "WARNING: Buffer has changed by %d bytes since last save." delta))))

(add-hook 'before-save-hook 'check-buffer-size-on-save)

答案 1 :(得分:4)

这不是Emacs特有的,但是如果你想避免将来丢失工作,那么将你的工作提交给版本控制系统是非常有帮助的。我通常使用Git,但是有些人发现Mercurial使用起来有点简单(还有很多其他的东西,比如Subversion,Bazaar等等,但Git和Mercurial是最受欢迎的分布式版本控制系统,这使得更容易版本控制磁盘上的目录而无需设置服务器)。版本控制系统允许您随时记录工作的历史记录,因此如果您犯了一些重大错误,您可以恢复到旧版本。