我在GNU Emacs配置中有这一行,当我保存时清除空格:
(add-hook 'before-save-hook 'whitespace-cleanup)
如何防止它在某些模式下运行(例如Makefile模式)?
答案 0 :(得分:2)
以下定义将在模式下运行whitespace-cleanup
,但条件中给出的除外:
(defun elektito/whitespace-cleanup ()
(when (not (derived-mode-p 'makefile-mode))
(whitespace-cleanup)))
(add-hook 'before-save-hook 'elektito/whitespace-cleanup)
这使用derived-mode-p
来检查当前模式而不是直接比较,正如你提到的makefile,而makefile使用了大量略有不同的模式,所有模式都来自makefile-mode
。 derived-mode-p
接受多个参数来检查不同的父模式。
(注意:可以使用(unless COND EXPR)
代替(when (not COND) EXPR)
,但我发现可读性较差;您可能有不同的偏好。)