对emacs的撤销插件真的很失望。undo-tree新版还是有问题,换成undo-fu也会出问题。vim那样的persistent undo就不指望了,现在连一个session里面的撤销都不好用,天知道什么时候会抽风。是不是只能放弃所有插件用vanillar emacs的undo命令才可靠?
多谢。不想试了,不想做小白鼠了,老是丢东西,受不了。我要的只是一个可靠的撤销功能而已。
在一个session里undo没办法回退,跨session还能行?不可靠的撤销功能再强大也没啊。
另外,是不是有git大家都不用undo了?
undo-tree确实是乱丢数据,吃了亏后一直用emacs自己的undo功能(+undohist +undo-propose),感觉也没有多大不便。
我的配置
(use-package undohist)
(use-package undo-propose)
(global-set-key (kbd "C-?") #'undo-only)
(global-set-key (kbd "C-x u") #'undo-propose)
(add-hook 'after-init-hook
'(lambda ()
(require 'undohist)
(undohist-initialize)
;; Patch to make undohist silent
(define-advice undohist-recover-1 (:override ())
(let* ((buffer (current-buffer))
(file (buffer-file-name buffer))
(undo-file (make-undohist-file-name file))
undo-list)
(when (and (undohist-recover-file-p file)
(file-exists-p undo-file)
(null buffer-undo-list))
(with-temp-buffer
(insert-file-contents undo-file)
(goto-char (point-min))
(let ((alist (undohist-decode (read (current-buffer)))))
(if (string= (md5 buffer) (assoc-default 'digest alist))
(setq undo-list (assoc-default 'undo-list alist))
(message "File digest doesn't match, so undo history will be discarded."))))
(when (consp undo-list)
(setq buffer-undo-list undo-list)))))))
(setq undohist-directory (no-littering-expand-var-file-name "undohist"))
(setq undohist-ignored-files '("\\.git/COMMIT_EDITMSG$"))
现在官方有了undo-redo
,应该会好不少。然后undo-tree
的作者最近几个月又忽然开始更新了,据他说修复了一些bug,而且把undo-limit
之类的默认值调大了。在不用undo-in-region
的前提下,应该基本能用了。
@yangsheng6810 你指的是1月份的更新?那个版本还是有问题,4月份的时候doom已经放弃undo-tree了,默认使用undo-fu。https://github.com/hlissner/doom-emacs/commit/8ab0cd66a71adcce6d9db01fb46e3bd14d3eb304
这个方案可靠性怎么样?用了多久了?出过意外没?
用Emacs自带undo即可。
确实,有version control之后对undo没什么需求
undo-tree 有好多forked版本,一直不知道哪个才是官方的版本,有链接吗?。
我还用的很老的版本,原来还有那么多问题,看来是我用的还不够多。
用的就是emacs自带的undo,没出过问题。undohist 单纯是 save/load,undo-propose 是弹出一个 buffer 让你修改到想要的状态后再把状态应用到原来的 buffer 里。这两个都不像undo-tree一样激进。
@ksqsf 没用过undohist。能不能解释一下?save和load什么
undo-propose倒是用过,不太适应,想法不错。
更新
我看过代码,已经知道是怎么回事了。
另外发现undo-fu-session和undohist功能重合,前者一直在维护。
很多时候反反复复修改,commit的时机你是怎么掌握的?
你的fork要是能够解决undo-tree的问题,那就太好了。evil依赖undo-tree。好多人都在要求干掉这个依赖。你要是能把它弄得稳定些,evil用户肯定都会感谢你。
你不觉得 vanilla emacs 的撤消超级好用吗?
段位不够,之前没用过 研究研究去
之前换成undo-fu,结果发现也有问题,换回undo-tree了。新版本还行,基本没出现什么数据丢失。
我的undo-tree到现在还没出过问题,不懂
undo-tree
真的是一坨…………恶心得一塌糊涂
undo redo穿插的话超麻烦啊,感觉没啥人用自带undo