最近突然发现evil下的C-r恢复操作功能不正常了,按下的时候会提示Customize 'evil-undo-system' for redo functionality
。然后顺便撤销树好像也不正确了,无法恢复之前的操作。这个问题有没有朋友遇到?怎么解决?
evil最近有个更新,不强依赖undo-tree
了。同时引入了evil-undo-system
来配置用什么undo包(好象是支持undo-tree以及28引入的undo-redo),默认值是一个placeholder,会输出这个提示。
所以,配置下evil-undo-system
就好了。
多谢回复,但是还是有点小问题,应该是emacs或者evil的bug。总之,直接在init.el中设置
(setq evil-undo-system 'undo-tree)
是不行的,还是会提示 Customize 'evil-undo-system' for redo functionality
。翻看evil中对应代码,是这样的
(defun evil-set-undo-system (system)
"Set `evil-undo-function' and `evil-redo-function` by SYSTEM."
(cond
((not system)
(setq evil-undo-function 'undo
evil-redo-function 'evil--redo-placeholder))
((eq system 'undo-redo)
(setq evil-undo-function 'undo-only
evil-redo-function 'undo-redo))
((eq system 'undo-tree)
(setq evil-undo-function 'undo-tree-undo
evil-redo-function 'undo-tree-redo))
((eq system 'undo-fu)
(setq evil-undo-function 'undo-fu-only-undo
evil-redo-function 'undo-fu-only-redo))
(t
(error "Unknown undo system %s" system))))
(defcustom evil-undo-system nil
"Undo system Evil should use. If equal to `undo-tree' or
`undo-fu', those packages must be installed. If equal to
`undo-tree', `undo-tree-mode' must also be activated. If equal
to `undo-redo', Evil uses commands natively available in Emacs 28."
:type '(choice (const :tag "Vanilla undo" nil)
(const undo-redo)
(const undo-tree)
(const undo-fu))
:group 'evil
:set #'(lambda (sym value)
(evil-set-undo-system value)
(set-default sym value)))
猜测是defcustom中那个set指令还不支持或其它什么原因。于是直接在init.el中写
(global-undo-tree-mode)
(evil-set-undo-system 'undo-tree)
问题解决。
emacs版本 27.1 evil版本 20201014.2043
2 个赞
我也遇到了同样的问题,感谢啊
我也试试,我也遇到了,正愁呢