gpt4 book ai didi

Emacs setq 加载前

转载 作者:行者123 更新时间:2023-12-02 20:29:13 26 4
gpt4 key购买 nike

自定义Emacs时,是在加载包之前还是之后设置相应的变量?

即,

(setq some-variable some-value)
(require 'some-package)

(require 'some-package)
(setq some-variable some-value)

在我看来,大多数时候两者都可以工作,除非某些包在加载后明确要求 init 。我说得对吗?

最佳答案

如果该变量是用户选项,请在加载包之前执行此操作。该包包含一个定义选项的 defcustom ,但如果变量已经有一个值(例如,来自您的 setq),则 defcustom 将不会设置该值>).

同样,如果变量是全局定义的变量,则不是用户选项,即由包使用 defvar 定义的变量。 defvardefcustom 一样,不会覆盖现有值。

另一方面,根据变量的不同,有时您希望在加载包后更改其值。这完全取决于包的作用以及该变量的使用方式。

不管我上面说了什么,在我看来,改变全局变量值(无论是否有选项)通常是一个坏主意 )在初始化文件中使用 setq

  • 对于选项,最好使用自定义 UI 对其进行自定义,或者使用 custom-set-variablescustomize-set-variable 函数之一 在你的初始化文件中(即明确地,你自己)。这是因为定义选项的 defcustom 可以具有用于值初始化和更新的“触发器”(并且它可以具有其他特殊处理)。为了评估其默认值表达式,给定的 defcustom 可以依赖于文件中出现在其之前的其他内容。

    如果您只是使用 setq 来初始化或更新选项,那么您就绕过了任何此类特殊处理,这可能不是您想要的,并且可能会导致意外.

  • 类似地,但一般来说不太重要,除非您确定自己在做什么,否则简单地在非选项上使用 setq 可能是一个坏主意(即 defvar) 变量。

我的建议:使用自定义,但不要让它写入您的初始化文件。相反,定义变量 custom-file (实际上,它是一个选项,但您不能真正像使用它一样使用它),以便自定义写入该单独的文件并保留您的init 文件供您手动修改。 (您仍然可以在初始化文件中使用 customize-set-variable。)

如果您这样做,您需要从初始化文件加载文件custom-file。您可以决定在 init 文件中的哪个点执行此操作,即 init 文件中的给定变量设置是否应该在加载 custom-file (自定义管理的设置)之前或之后出现。

关于Emacs setq 加载前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22915019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com