【问题标题】:Add several functions as hooks in Emacs在 Emacs 中添加几个函数作为钩子
【发布时间】:2014-09-11 03:37:02
【问题描述】:
如何在我的init.el 文件中简化类似以下代码的内容?
(add-hook 'org-mode-hook 'turn-on-auto-revert-mode)
(add-hook 'org-mode-hook 'turn-on-org-cdlatex)
(add-hook 'org-mode-hook 'smartparens-mode)
(add-hook 'org-mode-hook 'abbrev-mode)
我还有几个类似的行,包括添加到org-mode-hook...的一些 lambda 函数...
【问题讨论】:
标签:
emacs
elisp
dot-emacs
【解决方案1】:
就个人而言,我强烈建议不要将lambda 函数添加到钩子中。主要原因是,如果您更改内容并重新评估 add-hook 表达式,则该挂钩包含 both 旧的和新的 lambda 表达式。第二个原因是检查钩子时它看起来很糟糕——与大型 lambda 表达式相比,查看函数名更好。
相反,我建议使用:
(defun my-org-mode-hook ()
(turn-on-auto-revert-mode)
(turn-on-org-cdlatex)
(smartparens-mode 1)
(abbrev-mode 1)))
(add-hook 'org-mode-hook 'my-org-mode-hook)
附注:您可以使用 global-auto-revert-mode 在所有缓冲区上启用自动恢复,这样您就不必为所有主要模式启用它。
【解决方案2】:
我用一个简单的dolist:
(dolist (fn '(turn-on-auto-revert-mode
turn-on-org-cdlatex
smartparens-mode
abbrev-mode))
(add-hook 'org-mode-hook fn))
这让您之后仍然可以使用remove-hook 或从自定义界面删除单个挂钩。