启动 Emacs 时,通常会尝试加载你的 初始化文件(init file)。 该文件可以是家目录下名为 .emacs 或 .emacs.el 的文件, 也可以是家目录下 .emacs.d 子目录中的 init.el。
命令行开关 ‘-q’、‘-Q’、‘-u’ 控制是否加载及从何处加载初始化文件;
‘-q’(以及更强的 ‘-Q’)表示不加载初始化文件,
而 ‘-u user’ 表示加载 user 的初始化文件而非你的。
See Entering Emacs in The GNU Emacs Manual。
若未指定选项,Emacs 使用 LOGNAME 环境变量,
或 USER(多数系统)、USERNAME(MS 系统)变量查找家目录与初始化文件;
即使切换用户(su),Emacs 仍会加载你自己的配置。
若这些环境变量不存在,Emacs 会通过用户 ID 查找家目录。
Emacs 还会尝试加载第二个初始化文件,即 早期初始化文件(early init file)(若存在)。 该文件为你 ~/.emacs.d 目录下的 early-init.el。 早期初始化文件与普通初始化文件的区别在于,前者在启动过程中加载更早, 可用于自定义普通初始化文件加载前初始化的部分内容。 例如,可通过设置 package-load-list 或 package-enable-at-startup 等变量 自定义包系统初始化流程。See Package Installation in The GNU Emacs Manual。
Emacs 安装可能包含 默认初始化文件(default init file),即名为 default.el 的 Lisp 库。
Emacs 通过标准库搜索路径查找该文件(see 程序的加载方式)。
Emacs 发行版本身不附带此文件,它用于本地自定义。
若默认初始化文件存在,每次启动 Emacs 时都会加载。
但你个人的初始化文件(若有)会优先加载;若其将 inhibit-default-init
设为非 nil 值,Emacs 后续便不会加载 default.el。
批处理模式或指定 ‘-q’(‘-Q’)时,Emacs 既不加载个人配置也不加载默认配置。
另一个站点级自定义文件是 site-start.el。Emacs 在用户初始化文件**之前**加载该文件。 可通过 ‘--no-site-file’ 选项禁用加载。
该变量指定在用户初始化文件前加载的站点级自定义文件,默认值为 "site-start"。
唯一能有效修改它的方式是在 Emacs 转储前进行设置。
See Init File Examples in The GNU Emacs Manual, 查看在 .emacs 中实现常见自定义的示例。
若该变量非 nil,阻止 Emacs 加载默认初始化库文件。默认值为 nil。
该常规钩子在加载所有初始化文件(site-start.el、个人初始化文件、default.el)之前运行一次。 (唯一能有效修改它的方式是在 Emacs 转储前。)
该常规钩子在加载所有初始化文件(site-start.el、个人初始化文件、default.el)之后运行一次, 早于加载终端专用库(文本终端启动时)与处理命令行动作参数。
该常规钩子在处理完命令行参数后运行一次。批处理模式下不运行。
该常规钩子与 emacs-startup-hook 非常相似。
唯一区别是它在框架参数设置完成后稍晚运行。See window-setup-hook.
该变量保存用户初始化文件的绝对路径。 若实际加载的是编译后文件(如 .emacs.elc),该值仍指向对应的源文件。
该变量保存 Emacs 默认目录名称。
若该目录存在且 ~/.emacs.d/ 与 ~/.emacs 不存在,
默认值为 ${XDG_CONFIG_HOME-'~/.config'}/emacs/;
其他平台(MS-DOS 除外)均默认为 ~/.emacs.d/。
其中 ${XDG_CONFIG_HOME-'~/.config'} 表示环境变量 XDG_CONFIG_HOME 的值(若已设置),
否则为 ~/.config。
See How Emacs Finds Your Init File in The GNU Emacs Manual.