两个内容一样的 add-hook 怎样写比较好?

请教,

比如只在 org-mode 和 markdown-mode 中才实现某功能,分别 add-hook 然后 lambda 好几行。

如果后面的都一样,应该如何实现?

我试了这样:

(add-hook 'org-mode-hook #'markdown-mode-hook
          '(lambda ()
           ........)
)

可是在 spacemacs 里提示 Symbol's function definition is void: markdown-mode-hook, 无论加不加 # 都是这样。

(add-hook 'org-mode-hook markdown-mode-hook
          '(lambda ()
           ........))
(dolist (hook '(org-mode-hook markdown-mode-hook))
 	    (add-hook hook 
            '(lambda ()
           ........)))
1 个赞

给你的功能起个名字,要比 lambda 好很多

  • 方便 remove-hook
  • C-h v org-mode-hook 更友好的结果
  • 方便更新(用函数名只需要重现定义 C-M-x 函数即可,用 lambda 需要先 remove-hook,然后再 add-hook
  • etc

另外,lambda 不需要 quote

除了 @Samray 所说的,你也可以把你的 lambda 放到变量里,再一一绑定

(let ((func (lambda () (message "Do something"))))
  (add-hook 'foo-hook func)
  (add-hook 'bar-hook func))
3 个赞