我已经从ELPA安装了一些东西,即邪恶和彩虹分隔符。
为了让它们在加载emacs时运行,我会提出类似的内容:
(evil-mode)
(global-rainbow-delimiters-mode)
在我的init.el文件中。
但是,因为我是从ELPA安装它们的,所以在我的init.el加载之后才会加载它们,因此两个符号都是未定义的。
据我了解,这也阻止我做像
这样的事情(add-hook 'after-init-hook 'global-rainbow-delimiters-mode)
我该如何解决这个问题?
后记:这个问题实际上是由于我在init.el的开头没有调用(package-initialize)
造成的,这会加载所有使用软件包安装的东西(evilmode和rainbow-delimiters只是其中的两个) )在正确的时间
答案 0 :(得分:3)
您的add-hook
解决方案可行。
在那里,'global-rainbow-delimiters-mode
只是一个名称,当调用add-hook
时,它将在稍后解析为该函数,并且该函数将在那时存在。
ELPA documentation确实提到了这种方法,尽管它似乎认为这是最后的手段。
答案 1 :(得分:1)
AFAIU编译init文件不是一个好主意 - 但到目前为止还不相关。
你的钩子失败了,因为它在读取init后运行,但是在东西被加载之前。您需要在ELPA加载后运行函数。
尝试eval-after-load
答案 2 :(得分:1)
您还可以使用(package-initialize)
尽早初始化软件包。这将允许您不将所有代码放在一个钩子中。