首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时在Emacs中使用附加钩子、后加载

何时在Emacs中使用附加钩子、后加载
EN

Stack Overflow用户
提问于 2014-10-12 14:12:56
回答 1查看 1.6K关注 0票数 2

我读过负载后eval与附加钩。根据页面,eval-after-load中的代码只执行一次。

另一方面,每次打开该模式的缓冲区时,add-hook内部的代码都会运行。

好的。但是,如何才能确定哪些代码应该在eval-after-load块或add-hook块中呢?例如,

代码语言:javascript
复制
(eval-after-load "js2-mode"
  '(progn
      (js2-basic-offset 2)))

代码语言:javascript
复制
(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时,我都要问?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-12 14:24:48

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

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

如果您正在设置一个全局变量,那么在模式挂钩中这样做是没有意义的:每当您在特定模式下加载一个文件时,您都会更改一个全局变量。如果调用影响全局设置的函数,也会发生同样的情况。

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

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

代码语言:javascript
复制
(setq js2-basic-offset 2)

或者通过自定义界面。

如果您希望在不同的文件中以不同的方式设置该值,则将其设置为主模式钩子- something,如下所示

代码语言:javascript
复制
(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有内置的设施,涵盖了在每个文件或每个项目基础上设置变量的典型用例:文件局部变量目录局部变量

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26326040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档