如何在Emacs启动时自动为每个文件和每个主要模式使用flyspell-mode?
另外,有没有XML字典不将XML标记标记为拼写错误的单词?
发布于 2013-11-20 01:41:31
这个问题的答案对我很有效:
How to enable automatic spell check by default?
此外,与其他先前的答案相比,它似乎更通用。将以下代码行添加到.emacs或init.el中。
(add-hook 'text-mode-hook 'flyspell-mode)
(add-hook 'prog-mode-hook 'flyspell-prog-mode)发布于 2011-07-28 23:02:47
您可能并不是真的希望在所有模式下都启用flyspell-mode,而是希望在主要处理文本的模式(文本模式、消息模式等)中启用flyspell-mode,在编程模式(C/C++、Java、Ruby、Lisp等)中启用flyspell-prog-mode。这两种模式的不同之处在于,第一种模式检查所有单词,而flyspell-prog-mode只检查注释和字符串中的单词(从而避免检查代码,因为代码通常不是单词)。
无论哪种方式,都没有一个地方可以在所有文件/缓冲区中启用flyspell,因为它已被写入始终为缓冲区本地。一个非常接近的例子是
(defun turn-on-flyspell () (flyspell-mode 1))
(add-hook 'find-file-hooks 'turn-on-flyspell)这不包括没有关联文件的buffers,我也不建议使用它,因为它不区分编程模式和非编程模式--我认为这很有用。
因为无法知道某些模式是否是编程模式,所以您需要手动为您关心的所有编程模式添加自定义,如下所示:
(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进行了定制,不会对标签进行拼写检查(从Emacs23.2开始)。如果您使用的是旧版本的Emacs (回到21.1),您应该能够将此代码添加到您的.emacs中以获得对nxml-mode的支持
(put 'nxml-mode 'flyspell-mode-predicate 'sgml-mode-flyspell-verify)发布于 2011-07-28 23:01:56
您可以将以下内容添加到Emacs init文件中:
(flyspell all-mode)
函数描述说明如下:
在所有主要模式下都使用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中。
https://stackoverflow.com/questions/6860750
复制相似问题