defvar 初始化变量copy-region-as-kill 函数是用Emacs Lisp编写的。其中的两个函数,kill-append 和 kill-new,复制缓冲区中的一段区域并将其保存在一个名为 kill-ring 的变量中。本节描述了如何使用 defvar 特殊形式创建和初始化 kill-ring 变量。
(再次注意,术语 kill-ring 是不准确的。从缓冲区中剪切出来的文本可以被还原;它不是一个尸体环,而是一个可以复活的文本环。)
在Emacs Lisp中,诸如 kill-ring 这样的变量是通过使用 defvar 特殊形式创建并赋予初始值的。其名称来自于“定义变量”。
defvar 特殊形式类似于 setq,因为它设置变量的值。但与 setq 不同的有两点:首先,它仅在变量尚未具有值时设置变量的值。如果变量已经有值,defvar 就不会覆盖现有值。其次,defvar 具有文档字符串。
(有一个相关的宏,defcustom,用于用户自定义的变量。它比 defvar 更强大。
(See 使用 defcustom 设置变量.)