defvar 与星号 ¶在早期,Emacs 既使用 defvar 特殊形式定义内部变量(用户一般不会修改),
也用它定义用户可配置变量。尽管现在仍然可以用 defvar 定义用户可配置变量,
但建议改用 defcustom,因为它能对接自定义设置命令。
(see Specifying Variables using defcustom.)
在使用 defvar 定义变量时,可以在文档字符串第一列开头写一个星号 ‘*’,
以此区分该变量是用户可能需要修改的配置项。例如:
(defvar shell-command-default-error-buffer nil "*`shell-command' 命令错误输出所用的缓冲区名称。 ... ")
你可以(现在依然可以)使用 set-variable 命令临时修改
shell-command-default-error-buffer 的值。
不过,通过 set-variable 设置的选项只在当前编辑会话生效,
重启 Emacs 后不会保留。每次 Emacs 启动都会读取原始值,
除非你在 .emacs 文件中手动设置或通过 customize 进行修改。
See Your .emacs File.
对我而言,set-variable 命令的主要用途是提示我有哪些变量
可以写进 .emacs 配置。这类变量如今已有 700 多个,
很难全部记住。好在执行 M-x set-variable 后按 TAB,
就能看到变量列表。(See Examining and Setting Variables in The GNU Emacs Manual.)