为了更好感受到 Lockfile、备份(Backup)和预存(Auto-save)的必要程度,我打算把它们都关掉
;; .#foo.txt
;; 不同进程修改同一个文件
(setq create-lockfiles nil)
;; foo.txt~
;; 备份最近一个版本
(setq make-backup-files nil)
;; #foo.txt#
;; 定期预存,否则停电、系统崩溃等会损失没保存数据
(setq auto-save-default nil)
从这里想到有哪些能使 Emacs 崩溃的方法?比如运行某一个 Emacs Lisp 表达式?印象中非法 Byte Code、Thread、Dynamic Module 都有可能使 Emacs 崩溃。大家知道有哪些具体的、 可以稳定重现的方法吗?
1 个赞
最近使用 emacs-mac 26.1 编辑着编辑着就闪退了。。。但是没法稳定复现。似乎和company 的补全有关系。//
自动保存就用写的 EmacsWiki: auto-save.el 吧, 不知道比 emacs 默认的那种版本管理省心多少倍, 指头一松就自动保存, 而且还不会产生一大堆垃圾文件。
配置文件也超级简单:
https://www.emacswiki.org/emacs/init-auto-save.el
4 个赞
manateelazycat:
自动保存
Emacs 自带的 Auto-Save 与你所指的「自动保存」不是一个意思,以下是 Auto Save 的定义(粗体是我加的):
From time to time, Emacs automatically saves each visited file in a
separate file, without altering the file you actually use . This is
called “auto-saving”.
我猜测你的 auto-save.el
和 Emacs 自带的 auto-save-visited-mode
功能一样,虽然两者我都还没试过。
Emacs Byte-code Internals « null program 提到有问题的 Byte-code 能使 Emacs 崩溃,比如:
M-: (#[0 "\300\207" [] 0])
LdBeth
2018 年7 月 14 日 04:53
11
有问题的 byte-code 会造成访问错误的内存地址,也就是通称 segfault,操作系统检测到以后会发送 SIGSEGV,实际上和主动运行 kill -11 PID
效果应该是完全一样的。
似乎 Emacs 26 以后会对 byte code 进行檢查,对不合法的指令直接报错以免崩潰。
3 个赞
这些设置留在那儿和auto-save.el不会有冲突吧
auto-save-visited-file-name t
auto-save-interval 300
;; 禁用Emacs备份机制
(setq make-backup-files nil)
(setq auto-save-default nil)
;; 启用 LazyCat 的自动备份插件
(require 'auto-save)
(auto-save-enable)
(setq auto-save-slient t)
(setq auto-save-delete-trailing-whitespace t)
guo
2018 年7 月 23 日 04:13
14
感觉mac下的emacs崩溃的概率要比linux大很多.
auto-save 有没有什么缺陷的,我看很多大牛说这个自动保存并不是完美的,总会有一些缺陷
auto-save.el 是我写的, 我都用了十几年了, 很多东西要自己用才知道好不好。
1 个赞
感觉你俩说的 auto-save 不是同一个东西, @manateelazycat 的 auto-save.el 是自动把未保存的 buffer 保存到它的文件中,我有在用,挺好用的,解放双手,不用自己再手动 C-x C-s
保存。
Emacs 内置的 auto save 是把内容保存到 xxx~
中,而不是 xxx
文件本身。
LdBeth
2018 年7 月 23 日 09:44
19
我觉得最大的问题是,用了这个以后 revert-buffer
就算废了。这就是为什么 Emacs 自带的备份是存在别的文件。
macOS 很多带有自动保存的软件,尤其是官方出的,也不会擅自覆盖原来的文件,而是利用集成到桌面系统的版本控制功能保存副本。
那类似 IDEA 这种实时保存是怎么做的?其实也是后台保存到另一套文件中么?