我在emacs配置中使用以下结构:对于我使用的每种编程模式,我在一个名为programming-mode-config.el的文件中维护配置。 (所以python配置将进入python-mode-config.el等)。
之前,我曾经在init.el中要求每个文件。这种方法的缺点是我的启动时间很长。所以这周末,我坐下来将所有需求转换为自动加载。现在我的init文件看起来像这样:
(autoload 'python-mode "python-mode-config" "Load python config" t)
因此在我打开python文件之前不会加载python配置。这有助于将我的启动时间缩短到大约1秒,但在所有情况下都无法正常工作。例如,
(autoload 'erc "erc-mode-config" "Load configuration for ERC" t)
根本没有加载我的erc调整。查看自动加载文档,它指出:
Define FUNCTION to autoload from FILE.
...
If FUNCTION is already defined other than as an autoload,
this does nothing and returns nil.
所以我猜测erc配置没有被加载,因为ERC带有emacs'内置',而python-mode是我使用的插件。有没有什么办法可以让我的erc配置只在我实际使用erc时加载?我看到的唯一另一种选择是使用eval-after-load,但是将我的自定义的每一小部分都放入eval-after-load中会非常痛苦。
我担心也可能是因为我没有正确地使用自动加载装置。任何帮助将不胜感激。
答案 0 :(得分:10)
autoload
旨在用于从某个文件加载函数,而不是加载其他功能 - 这就是您尝试做的事情。
改为使用eval-after-load
:
(eval-after-load "erc" '(load "erc-mode-config"))
告诉Emacs在加载erc-mode-config
文件后加载"erc"
库 - 这就是你想要的。如果您的内部有'(require 'erc-mode-config)
语句,也可以使用provide
。
正确使用autoload
是加载包含该符号的实际文件。所以,通过
(autoload 'erc "erc-mode-config" "Load configuration for ERC" t)
您告诉Emacs通过加载erc
库找到函数"erc-mode-config"
,而erc
库不是定义autoload
函数的位置。此外,docstring适用于相关函数,因此上面的erc
语句会使"Load configuration for ERC"
的帮助字符串为autoload
- 这也是错误的。
我猜你的第一个(require 'python)
示例有效,因为你的配置文件中有一个{{1}}语句......但这只是猜测。