8.5.1 defvar 和星号

过去,Emacs 在内部变量和用户可能更改的变量上都使用了 defvar 特殊形式。尽管您仍然可以使用 defvar 来定义用户可定制的变量,请改用 defcustom,因为它提供了进入定制命令的路径。 (See 使用 defcustom 指定变量.)

当使用 defvar 特殊形式指定变量时,您可以通过在其文档字符串的第一列键入星号(‘*’)来区分用户可能想更改的变量和其他变量。例如:

(defvar shell-command-default-error-buffer nil
  "*'shell-command' …错误输出的缓冲区名称。
… ")

您可以(仍然可以)使用 set-variable 命令临时更改 shell-command-default-error-buffer 的值。但是,使用 set-variable 设置的选项仅在编辑会话期间设置。新值在会话之间不会保存。每次Emacs启动时,它都会读取原始值,除非您在 .emacs 文件中更改了该值,要么手动设置它,要么使用 customize。 See 您的 .emacs 文件.

对我来说,set-variable 命令的主要用途是建议我可能希望在 .emacs 文件中设置的变量。现在有700多个这样的变量,太多了,记不住。幸运的是,在调用 M-x set-variable 命令后,您可以按 TAB 键查看变量的列表。 (See 检查和设置变量 in GNU Emacs手册.)