Emacs会默认require些什么?

有一天,我要使用Emacs默认的括号配对,于是我打出了

(electric-pair-mode t)

然后C-x C-e,果然可以括号配对了。

可是问题来了,我还没有(require 'electric)呢!难道是因为Emacs会默认require一些包么?都有哪些包?这些默认在不同的机器上都一样么?(Emacs 24, 系统 NOI Linux,大概可以当做是阉割版Ubuntu)

使用emacs -q打开emacs. 再C-h v RET features RET 可以得到Emacs它require了什么东西

1 个赞

Emacs 有个延迟加载的机制: autoload ,可以在调用相应函数( autoload cookie )时,再“ require ”。

electric-pair-mode 就是这样的函数:

;;;###autoload
(define-minor-mode electric-pair-mode
  "Toggle automatic parens pairing (Electric Pair mode).
With a prefix argument ARG, enable Electric Pair mode if ARG is
positive, and disable it otherwise.  If called from Lisp, enable
the mode if ARG is omitted or nil.
5 个赞

默认情况下 Emacs 应该会把 site-lisp 全部跑一遍,elec-pair.el 是 Emacs 自带的一部分,所以默认会加载。用 --no-site-file 参数可以禁止加载 site-lisp。

比如在 Debian 9 下这个文件在 /usr/share/emacs/25.1/lisp/elec-pair.el.gz

2 个赞

自带的包会默认加入load-path,然后这个函数又有autoload,所以调用它的时候就会自动加载相关代码。