gpt4 book ai didi

emacs - 何时在 Emacs 中使用 add-hook、eval-after-load

转载 作者:行者123 更新时间:2023-12-01 23:04:55 25 4
gpt4 key购买 nike

我读过eval-after-load vs add-hook 。根据页面显示,eval-after-load 中的代码执行一次。
另一方面,每次打开该模式的缓冲区时,add-hook 中的代码都会运行。

好的。但是我如何确定哪些代码应该位于 eval-after-load block 或 add-hook block 内?例如,

(eval-after-load "js2-mode"
'(progn
(js2-basic-offset 2)))

(eval-after-load "js2-mode"
'(progn
(defun custom:js2-config ()
(js2-basic-offset 2))
(add-hook 'js2-mode-hook 'custom:js2-config)))

我不是在问js2-basic-offset
有一般规则吗?或者..每当我使用eval-after-load时,我都必须问?

最佳答案

您设置的是全局变量还是局部变量?

如果您要设置一个缓冲区局部变量(其值在不同缓冲区中可能不同),则必须在文件加载后完成,因此在主模式 Hook 中。如果您调用的函数对当前缓冲区有影响,也会发生同样的情况。

如果您要设置全局变量,那么在模式 Hook 中这样做是没有意义的:每当您碰巧以某种模式加载文件时,您都会更改全局变量。如果您调用影响全局设置的函数,也会发生同样的情况。

许多全局变量可以直接在 .emacs 中设置,无需等待将声明和使用它的库加载。事实上,全局变量通常就是这种情况。

js2-basic-offset 是一个变量,而不是一个函数。如果要在所有 JS 缓冲区中配置缩进,请直接在 .emacs 中设置,可以使用

(setq js2-basic-offset 2)

或通过自定义界面。

如果您想在不同文件中设置不同的值,那么您可以在主要模式 Hook 中设置它 - 类似于

(defun custom:js2-config ()
(when (…)
(make-local-variable 'js2-basic-offset)
(setq js2-basic-offset 2)))
(add-hook 'js2-mode-hook 'custom:js2-config)

您无需等待库加载即可添加 Hook 。

请注意,Emacs 具有内置功能,涵盖了在每个文件或每个项目的基础上设置变量的典型用例: file-local variablesdirectory-local variables .

关于emacs - 何时在 Emacs 中使用 add-hook、eval-after-load,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26326040/

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