有可能的是,您不希望所有模式启用flyspell模式,而是希望对主要处理文本(文本模式,消息模式等)的模式启用flyspell模式,并使用flyspell-prog-mode对于编程模式(C/C++,Java,Ruby,Lisp等).两种模式之间的区别在于首先检查所有单词,而flyspell-prog模式只检查注释和字符串中的单词(从而避免检查代码,通常不是单词).
无论哪种方式,没有一个地方可以在所有的文件/缓冲区中启用flyspell,因为它已被写入总是缓冲区本地.将近似近似
(defun turn-on-flyspell () (flyspell-mode 1)) (add-hook 'find-file-hooks 'turn-on-flyspell)
这不包括没有关联文件的缓冲区,我不建议使用它,因为它不区分编程模式和非编程模式 – 我认为是有用的.
由于无法知道某些模式是否为编程模式,因此您需要手动添加您关心的所有编程模式的自定义,具体如下:
(mapcar (lambda (mode-hook) (add-hook mode-hook 'flyspell-prog-mode)) '(c-mode-common-hook tcl-mode-hook emacs-lisp-mode-hook ruby-mode-hook java-mode-hook))
注意:这两个代码块可能不能很好的一起玩.
而且,关于XML,flyspell已经有sgml-mode,html-mode和nxml-mode的定制功能,无法拼写检查标签(从Emacs 23.2开始).如果您使用的是较早版本的Emacs(回到21.1),您应该可以将其添加到.emacs以获得对nxml-mode的支持:
(put 'nxml-mode 'flyspell-mode-predicate 'sgml-mode-flyspell-verify)