【问题标题】:Custom variables do not work with setq in emacs自定义变量不适用于 emacs 中的 setq
【发布时间】:2020-03-08 12:41:14
【问题描述】:

好的,所以我对 emacs 还很陌生,甚至对 lisps 也很陌生。所以我知道我们可以这样设置变量值:

(setq variable value)

但是,似乎有些变量在使用 setq 设置时似乎不起作用。例如:markdown-mode 包中的 ma​​rkdown-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)
)

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

【问题讨论】:

    标签: variables emacs customization


    【解决方案1】:

    用户选项(即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

    【讨论】:

    • 谢谢。那真的很有帮助。我只是想问一下使用自定义UI真的更好吗?因为即使我们指定了一个单独的文件,就像帖子中给出的那样,当你的 Emacs 配置变得非常长并且你需要指定很多自定义变量时,它仍然会很混乱。例如对于使用 exwm 的人
    • 我从不使用它——但您应该了解可能出现的问题。 99% 的情况下,如果你使用 setq 并不重要——但对于特殊情况,例如。修改前缀后需要重新计算的keymap前缀,需要在加载包前设置前缀,或者使用setter函数(funcall (get '<var> 'custom-set) '<var> <value>)
    • 最重要的是——在加载包之前使用setq,你可能永远不会遇到问题,除非你即时更改变量
    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 2015-06-02
    • 2021-11-26
    • 2022-12-29
    • 2017-12-08
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    相关资源
    最近更新 更多