如果变量的值发生变化,如何以交互方式设置回原始值?

时间:2013-05-08 02:11:08

标签: vim emacs elisp

有时defvar / defcustom变量会被其他带有setq等的elisp脚本中的另一个表达式更改,或者它们会被目录/文件本地设置更改。实际上,我可以使用describe-variable查看其原始值,然后手动设置它;但它仍然有点冗长。

在Vim中,总有一种方法可以使用!恢复某些变量的默认值。我相信Emacs也有办法实现这一目标。

那么有没有更简单和互动的方式呢?感谢。

更新:使用set-default无法正常工作。例如,goto-address-mail-face原始值在goto-addr.el中为italic,并假设(setq goto-address-mail-face 'link)中有~/emacs.d/init.el。但是,当我在迷你缓冲区中(setq goto-address-mail-face (default-value 'goto-address-mail-face))时,结果仍为link

1 个答案:

答案 0 :(得分:1)

对于defcustom变量,您可以使用M-x customize-variable界面。

对于defvar,我认为INITVALUE参数不会被记住(我认为它甚至不会在变量已经绑定的情况下进行评估)。

变量可以有“默认”值,但这是指全局值(与缓冲区本地绑定相对),当然可以修改。

您可以使用M-: (setq SYMBOL (default-value 'SYMBOL))

以交互方式将缓冲区局部变量设置为其默认值

参见 C-h i g (elisp) Default Value RET