如何简化我的
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 函数
就个人而言,我强烈建议不要向钩子添加
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
在所有缓冲区上启用自动恢复,这样您就不必为所有主要模式启用它。
我用一个简单的
dolist
:
(dolist (fn '(turn-on-auto-revert-mode
turn-on-org-cdlatex
smartparens-mode
abbrev-mode))
(add-hook 'org-mode-hook fn))
这让您之后仍然可以使用
remove-hook
或从自定义界面删除单个挂钩。
这有点是两者的结合,它创建了一个可重用的函数,以压缩后面的语义以供将来的其他钩子使用。
(defun add-hooks (hooked hooks)
(dolist (fn hooks) (add-hook hooked fn)))
(add-hooks 'prog-mode-hook '(display-line-numbers-mode
display-fill-column-indicator-mode
hl-line-mode
my-fill-column-mode-hook-80))