本节介绍文档字符串的编写技巧与规范。运行命令 M-x checkdoc-minor-mode 可检查其中大部分规范。
apropos 输出中显示效果不佳。
文本排版美观时可自动换行。Emacs Lisp 模式会按照 emacs-lisp-docstring-fill-column 指定宽度对文档字符串换行。
不过,精心调整换行位置往往能大幅提升可读性。
若文档字符串较长,可在段落间使用空行分隔。
对函数而言,首行应简要回答 “该函数做什么?”;对变量而言,首行应简要回答 “该值含义是什么?”。 表述应面向用户与调用者,易于理解。 特别注意:不要通过罗列代码行为描述函数功能,而应说明这些行为的作用与函数约定。
文档字符串不必仅限一行,可使用多行详细说明函数或变量的使用方法。 其余文本也请使用完整语句。
eval 的文档将其第一个参数称为 ‘FORM’,因其实际参数名为 form:
Evaluate FORM and return its value.
元语法变量也应大写,例如将列表或向量拆分为可变子单元时的表示。 下例中的 ‘KEY’ 和 ‘VALUE’ 即为该写法:
The argument TABLE should be an alist whose elements have the form (KEY . VALUE). Here, KEY is ...
foo,应写作 “foo”,而非 “Foo”(后者是另一个符号)。
这看似与函数参数值的写法规范冲突,实则并不矛盾:参数 值 与函数用于保存该值的 符号 并非同一事物。
若因此导致句子以小写字母开头,可重写句子,避免将符号置于句首。
t 和 nil 不加标点。示例:
CODE can be `lambda', nil, or t.
注意 Emacs 显示文档字符串时,若终端支持,通常会将 ‘`’ 显示为左单引号 ‘‘’,‘'’ 显示为右单引号 ‘’’。See 文档中的按键绑定替换。 (本节旧版曾建议直接在文档字符串中使用非 ASCII 单引号,现已不推荐,因其会在不支持该字符的终端上导致帮助显示异常。)
当文档字符串使用带单引号的符号名,且该符号存在函数或变量定义时,帮助模式会自动创建超链接。 使用该功能无需额外操作。 但若符号同时有函数与变量定义,而你只想指向其中一个,可在符号名前添加 ‘variable’、‘option’、‘function’ 或 ‘command’ 以指定类型(大小写不敏感)。例如:
This function sets the variable `buffer-file-name'.
此时超链接将仅指向 buffer-file-name 的变量文档,而非函数文档。
若符号虽有函数或变量定义,但与当前文档内容无关,可在符号名前添加 ‘symbol’ 或 ‘program’ 以禁止生成超链接。例如:
If the argument KIND-OF-RESULT is the symbol `list', this function returns a list of all the objects that satisfy the criterion.
该写法不会链接到函数 list 的无关文档。
通常,无文档的变量不会生成超链接。 可在其前添加 ‘variable’ 或 ‘option’ 强制生成超链接。
文本的视觉样式(face)仅在名称前后带有 ‘face’ 一词时才生成超链接,此时仅显示其样式文档,即使该符号同时被定义为变量或函数。
若要链接到 Info 文档,可在 Info 节点(或锚点)的单引号名称前添加 ‘info node’、‘Info node’、‘info anchor’ 或 ‘Info anchor’。 Info 文件名默认为 ‘emacs’。示例:
See Info node `Font Lock' and Info node `(elisp)Font Lock Basics'.
若要链接到手册页,可在手册页单引号名称前添加 ‘Man page’、‘man page’ 或 ‘man page for’。示例:
See the man page `chmod(1)' for details.
Info 文档优先级高于手册页,如有可用的 Info 手册请优先链接。
例如 chmod 文档位于 GNU Coreutils 手册中,应优先链接该手册而非手册页。
若要链接到自定义组,可在组的单引号名称前添加 ‘customization group’(单词首字母大小写不限)。示例:
See the customization group `whitespace' for details.
最后,若要创建 URL 超链接,可在单引号 URL 前添加 ‘URL’。示例:
The GNU project website has more information (see URL `https://www.gnu.org/').
forward-char 的按键(通常为 ‘C-f’,用户修改按键绑定后可能变化)。See 文档中的按键绑定替换。
大量使用 ‘\\[…]’ 会轻微降低文档字符串显示速度,在慢速系统上累积后可能可感知。 因此建议不要过度使用,例如同一文档字符串中避免多次引用同一命令。
dired-find-file 的文档为:
In Dired, visit the file or directory named on this line.
defcustom。See 定义全局变量。
nil 值等效,并说明 nil 与非 nil 的含义。
The argument FOO can be either a number \(a buffer position) or a string (a file name).
该写法可避免 27.1 版之前 Emacs 的缺陷,即 ‘(’ 会被识别为 defun 起始位置(see Defuns in The GNU Emacs Manual)。 若不考虑使用旧版 Emacs 编辑代码,则无需该兼容处理。