我读过负载后eval与附加钩。根据页面,eval-after-load中的代码只执行一次。
另一方面,每次打开该模式的缓冲区时,add-hook内部的代码都会运行。
好的。但是,如何才能确定哪些代码应该在eval-after-load块或add-hook块中呢?例如,
(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时,我都要问?
发布于 2014-10-12 14:24:48
您是设置全局变量还是局部变量?
如果要设置缓冲区局部变量(其值在不同缓冲区中的值可能不同),则必须在加载文件之后执行,因此在主模式挂钩中。如果调用对当前缓冲区有影响的函数,也会发生同样的情况。
如果您正在设置一个全局变量,那么在模式挂钩中这样做是没有意义的:每当您在特定模式下加载一个文件时,您都会更改一个全局变量。如果调用影响全局设置的函数,也会发生同样的情况。
可以在.emacs中直接设置许多全局变量,而无需等待将声明和使用它的库加载。事实上,全局变量通常是这样的。
js2-basic-offset是一个变量,而不是函数。如果要在所有JS缓冲区中配置缩进,请在.emacs中直接设置缩进,使用
(setq js2-basic-offset 2)或者通过自定义界面。
如果您希望在不同的文件中以不同的方式设置该值,则将其设置为主模式钩子- something,如下所示
(defun custom:js2-config ()
(when (…)
(make-local-variable 'js2-basic-offset)
(setq js2-basic-offset 2)))
(add-hook 'js2-mode-hook 'custom:js2-config)您不需要等待加载库来添加钩子。
请注意,Emacs有内置的设施,涵盖了在每个文件或每个项目基础上设置变量的典型用例:文件局部变量和目录局部变量。
https://stackoverflow.com/questions/26326040
复制相似问题