在本次逐步解析中,遇到新函数时我会逐一讲解,有时详细,有时简略。如果你感兴趣,可以随时按下 C-h f 并输入函数名(再按 RET),查看任意 Emacs Lisp 函数的完整文档。同理,按下 C-h v 并输入变量名(再按 RET),即可查看变量的完整文档。
此外,describe-function 还会告知你函数定义所在的位置。
将光标移至包含该函数的文件名上并按下 RET。此处 RET 表示 push-button,而非 “return” 或 “enter”。Emacs 会直接跳转到该函数的定义处。
更一般地,如果你想在原始源文件中查看某个函数,可以使用 xref-find-definitions 函数进行跳转。xref-find-definitions 支持多种语言,不仅限于 Lisp 和 C,同时也适用于非程序文本。例如,xref-find-definitions 可以跳转到本文档 Texinfo 源文件中的各个节点(前提是你已运行 etags 工具,记录 Emacs 附带手册中的所有节点;see Create Tags Table in The GNU Emacs Manual)。
使用 xref-find-definitions 命令时,按下 M-.(即按住 META 键同时按句点键,或先按 ESC 再按句点键),然后在提示符下输入想要查看源代码的函数名,例如 mark-whole-buffer,再按 RET。(若该命令未出现提示符,可带参数调用:C-u M-.;see interactive 的不同选项。)Emacs 会切换缓冲区并在屏幕上显示该函数的源代码12。若要切回当前缓冲区,按下 M-, 或 C-x b RET。(部分键盘上 META 键标注为 ALT。)
顺便一提,包含 Lisp 代码的文件通常称为 库(libraries)。这一比喻源自专业类图书馆(如法律图书馆、工程图书馆),而非综合图书馆。每个库(即文件)都包含与特定主题或功能相关的函数,例如 abbrev.el 用于处理缩写及其他输入快捷方式,help.el 用于提供帮助功能。(有时多个库会为同一功能提供代码,例如多个 rmail… 文件共同实现电子邮件阅读功能。)在 The GNU Emacs Manual 中,你会看到类似“C-h p 命令允许按主题关键词搜索标准 Emacs Lisp 库”的语句。
若 Emacs 未显示 Lisp 函数的源代码,而是询问要访问哪个标签表,可从主模式为 Emacs Lisp 或 Lisp Interaction 的缓冲区中调用 M-.。