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

时间:2011-07-28 14:34:30

标签: xml emacs mode flyspell

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

另外,是否有XML字典没有将XML标记标记为拼写错误的单词?

4 个答案:

答案 0 :(得分:19)

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

How to enable automatic spell check by default?

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

(add-hook 'text-mode-hook 'flyspell-mode)
(add-hook 'prog-mode-hook 'flyspell-prog-mode)

答案 1 :(得分: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)

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

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

(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-modehtml-modenxml-mode进行了自定义,以便不对拼贴进行拼写检查(从Emacs 23.2开始)。如果您使用的是旧版本的Emacs(返回21.1),您应该可以将其添加到.emacs以获得对nxml-mode的支持:

(put 'nxml-mode 'flyspell-mode-predicate 'sgml-mode-flyspell-verify)

答案 2 :(得分:3)

您可以将以下内容添加到Emacs init文件中:

(flyspell-全模式)

功能描述说明:

  

在所有主要模式中使用Flyspell。适用于现有缓冲区和   随后创建的缓冲区。关闭`flyspell-text-modes'   如果在。

编辑:显然上述功能仅包含在Emacs 24中的flyspell版本中。如果您不能使用该版本,则应使用Trey建议的解决方案“半全局”启用flyspell。要使用NXML禁用XML标记检查,可以将以下行添加到Emacs init文件中:

(put 'nxml-mode 'flyspell-mode-predicate 'sgml-mode-flyspell-verify)

注意:此行已包含在Emacs 24中的flyspell.el中。

答案 3 :(得分:0)

我不能说什么时候,但是flyspell-mode现在可以很好地知道它处于什么模式并做出相应的反应。这是我的使用包实现,带有公司完成的接口。

 (use-package flyspell :demand t
   :config
   (use-package 
     flyspell-correct-helm) 
   (defun flyspellCompletion() 
     (flyspell-mode 1) 
     (set (make-local-variable 'company-backends) 
          (copy-tree company-backends)) 
     (add-to-list 'company-backends 'company-ispell)) 
   (defun flyspell-most-modes() 
     (add-hook 'text-mode-hook 'flyspellCompletion) 
     (add-hook 'prog-mode-hook 'flyspellCompletion)
     (dolist (hook '(change-log-mode-hook log-edit-mode-hook)) 
       (add-hook hook (lambda () 
                        (flyspell-mode -1))))) 
   (flyspell-most-modes) 
   :bind (:map flyspell-mode-map
               ("C-." . flyspell-correct-wrapper)))