16.10 自动加载

你不必通过加载文件或直接求值函数定义来安装函数,而是可以先让函数可用,但直到第一次调用时才真正加载安装。这称为 自动加载(autoloading)

当你执行一个自动加载的函数时,Emacs 会自动求值包含其定义的文件,然后调用该函数。

使用自动加载函数可以让 Emacs 启动更快,因为相关库不会立即加载;但第一次使用时需要稍等片刻,等待对应文件被求值加载。

不常用的函数通常会被设为自动加载。loaddefs.el 库包含数千个自动加载函数,从 5x5zone 应有尽有。当然,你可能会频繁使用某个原本不常用的函数。这时就应该在 .emacs 中用 load 表达式提前加载该文件。

在我的 .emacs 中,我加载了 14 个原本会自动加载的库。(其实把这些文件加入转储 Emacs 会更好,只是我忘了。 See Building Emacs in The GNU Emacs Lisp Reference Manual,以及 INSTALL 文件了解更多转储相关内容。)

你也可以在 .emacs 中添加自动加载表达式。autoload 是内置函数,最多接收五个参数,后三个为可选。第一个参数是要自动加载的函数名;第二个是要加载的文件名;第三个是函数说明;第四个指明该函数是否可交互式调用;第五个指明对象类型 — autoload 同时支持按键映射或宏,默认为函数。

下面是一个典型示例:

(autoload 'html-helper-mode
  "html-helper-mode" "Edit HTML documents" t)

html-helper-modehtml-mode 的早期替代方案,后者现已成为标准组件。)

该表达式对 html-helper-mode 函数设置自动加载, 从 html-helper-mode.el(或字节编译版本 html-helper-mode.elc,若存在)加载。 文件必须位于 load-path 指定的目录中。 文档说明这是用于编辑超文本标记语言文档的模式。 你可以通过 M-x html-helper-mode 交互式调用该模式。 (需要在自动加载表达式中重复函数原本的文档,因为此时函数尚未加载,文档不可用。)

See Autoload in The GNU Emacs Lisp Reference Manual,获取更多信息。