16.9 载入文件

GNU Emacs 社区的许多成员都编写了对 Emacs 的扩展。随着时间的推移,这些扩展通常会被包含在新的发行版中。例如,日历和日记包现在是标准的 GNU Emacs 的一部分,就像 Calc 一样。

您可以使用 load 命令来评估一个完整的文件,从而将文件中的所有函数和变量安装到 Emacs 中。例如:

(load "~/emacs/slowsplit")

这将评估(即加载)slowsplit.el文件,或者如果存在的话,加载emacs子目录中更快的、字节编译的slowsplit.elc文件。该文件包含了 John Robinson 在 1989 年编写的函数 split-window-quietly

split-window-quietly 函数以最小的重绘方式分割窗口。我在 1989 年安装它,因为它在我当时使用的速度为 1200 波特的终端上运行良好。如今,我只偶尔遇到这样的慢速连接,但我继续使用该函数,因为我喜欢它将缓冲区的下半部分留在新窗口的下半部分,而将上半部分留在上面的窗口中。

要替换默认的 split-window-vertically 的键绑定,您还必须取消该键的绑定,并将键绑定到 split-window-quietly,如下所示:

(global-unset-key "\C-x2")
(global-set-key "\C-x2" 'split-window-quietly)

如果您像我一样加载了许多扩展,那么您可以将该扩展文件所在的确切位置指定为 Emacs 的 load-path 的一部分,而不是像上面那样。然后,当 Emacs 加载文件时,它将在其默认目录列表以及该目录中搜索。 (默认列表在构建 Emacs 时在 paths.h 中指定。)

以下命令将您的 ~/emacs 目录添加到现有的加载路径中:

;;; Emacs 加载路径
(setq load-path (cons "~/emacs" load-path))

顺便说一下,load-libraryload 函数的交互式接口。完整的函数如下:

(defun load-library (library)
  "加载名为 LIBRARY 的 Emacs Lisp 库。
这是对函数 `load' 的接口。在 `load-path' 中搜索 LIBRARY,既包括 `load-suffixes',也包括(以及 `load-file-rep-suffixes')。

有关更多详细信息,请参见 Info 节点 `(emacs)Lisp Libraries'。
有关 `load-file' 对 `load' 的另一种接口,请参见 `Lisp Libraries' 节点中的信息。"
  (interactive
   (list (completing-read "加载库: "
                          (apply-partially 'locate-file-completion-table
                                           load-path
                                           (get-load-suffixes)))))
  (load library))

函数的名称 load-library 来自于“library”作为“file”的传统同义词的使用。该命令的源代码位于 files.el 库中。

另一个执行略有不同任务的交互式命令是 load-file。有关 load-library 与该命令之间区别的信息,请参阅 ‘Lisp Libraries, , Libraries of Lisp Code for Emacs, emacs, The GNU Emacs Manual‘。