自定义变量不适用于 emacs 中的 setq

Custom variables do not work with setq in emacs

好的,所以我是 emacs 的新手,甚至是 lisp 的新手。所以我知道我们可以通过这个设置变量值:

(setq variable value)

但是,似乎有些变量在使用 setq 设置时似乎不起作用。例如:markdown-mode包中的markdown-hide-markup。如果通过 customize UI 或通过以下方式设置它们,它们就会起作用:

(custom-set-variables 
 '(markdown-enable-wiki-links t)
 '(markdown-enable-math t)
 '(markdown-hide-markup t)
 '(markdown-fontify-code-blocks-natively t)
)

好吧,我只是想知道我是否遗漏了什么?或者有更好的方法吗?

用户选项(即由 defcustom 定义的变量)具有默认值、一些允许值以及初始化、设置和获取它的方法。

设置它的默认方式本质上是 setq-default,类似于 setq,但如果变量具有缓冲区本地值,它会设置默认(全局)值。

但是如果 defcustom 定义了一个特定的 setter 函数,那么您需要使用自定义函数来设置值,正如您发现的那样(或使用自定义 UI,它总是一个好主意)。如果 defcustom 具有 :set.

的(非默认)规范,就会出现这种情况

如果您使用 custom-set-variablescustomize-set-variable 而不是 setq(或 setq-default),或者如果您使用自定义用户界面(例如 M-x customize-option ),那么您确定选项值所需的任何预期初始化或更新(设置)代码将自动触发,并根据需要 运行 。如果你用setq,这个就不行了

另请参阅此 emacs.StackExchange post