(defhydra+ hydra-ivy ()
("a" nil)
("<escape>" keyboard-escape-quit :exit t)
("q" keyboard-escape-quit :exit t))
以上代码会在emacs启动时报error: Eager macro-expansion failure: (void-variable hydra-ivy/params)
,在doom里找到了解决办法:把这些放进一个eval里:
(eval '(defhydra+ hydra-ivy ()
("a" nil)
("<escape>" keyboard-escape-quit :exit t)
("q" keyboard-escape-quit :exit t)))
但doom里是用在其它macro上的,doom也用了defhydra+
但并没有这个问题的样子。
@fuxialexander 搜代码的时候搜到你的了,看你把defhydra+
注释掉了,大概也许是同样问题?
SPQR
2
一般的做法是看下错误信息具体是哪个函数展开的时候出错的,然后把那个函数所在文件require一下。dooomemacs可能是因为lazy load用的比较激进导致改加载的包没加载
我完整的是这样的,已经在use-package的:config
里了,等于require过了,但不加eval还是报错的
(use-package ivy-hydra
:demand t
:after (hydra ivy)
:config
;; learned from doom: putting macro in eval avoids following error:
;; error: Eager macro-expansion failure: (void-variable hydra-ivy/params)
(eval '(defhydra+ hydra-ivy ()
("a" nil)
("<escape>" keyboard-escape-quit :exit t)
("q" keyboard-escape-quit :exit t))))
我甚至把use-package展开了一下看看,:config
确实是require之后
哦查过一下,eager macro expansion就是在执行之前把所有能展开的全展开,然后再执行,也就是先展开了defhydra+
,再require的,所以就报错了 吧