如何在emacs中为所有文件和所有主要模式启用flyspell-mode?

mar*_*t1n 14 xml emacs mode flyspell

一旦启动Emacs,如何使flyspell-mode自动用于每个文件和每个主要模式?

还有,XML字典是不是将XML标记标记为拼写错误的单词?

b4h*_*and 19

这个问题的答案对我有用:

如何默认启用自动拼写检查?

此外,与目前的投票答案不同,它似乎更为笼统.将以下行添加到您的.emacsinit.el.

(add-hook 'text-mode-hook 'flyspell-mode)
(add-hook 'prog-mode-hook 'flyspell-prog-mode)
Run Code Online (Sandbox Code Playgroud)


Tre*_*son 17

有可能,您并不是真的想要flyspell-mode为所有模式启用,而是希望flyspell-mode启用主要处理文本(文本模式,消息模式等)的模式,以及flyspell-prog-mode编程模式(C/C++,Java, Ruby,Lisp等).两种模式之间的区别在于,第一种检查所有单词,而flyspell-prog-mode只检查注释和字符串中的单词(从而避免检查代码,通常不是单词).

无论哪种方式,都没有一个地方可以在所有文件/缓冲区中启用flyspell,因为它已被写入始终是缓冲区本地.近似将是

(defun turn-on-flyspell () (flyspell-mode 1))
(add-hook 'find-file-hooks 'turn-on-flyspell)
Run Code Online (Sandbox Code Playgroud)

这不包括没有相关文件的缓冲区,我不建议使用它,因为它没有区分编程模式和非编程模式 - 我认为这很有用.

因为无法知道某些模式是否是编程模式,所以您需要为所关注的所有编程模式手动添加自定义,例如:

(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))
Run Code Online (Sandbox Code Playgroud)

注意:两个代码块可能不能很好地协同工作.

而且,关于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)
Run Code Online (Sandbox Code Playgroud)