您可以通过多种不同的方式执行部分飞行拼写模式。一种是使用多模式方法,在单个缓冲区中定义多个模式,其中一种是编辑 cmets 的模式(例如),其中启用了 flyspell-mode。我曾经为某种编程语言这样做,但我再也找不到它的配置了,所以我想我不再使用那种语言了。无论如何,请参阅mmm-mode 以获取更多信息。
第二种选择是使用`flyspell-prog-mode'(见)为缓冲区的某些部分设置flyspell模式,在这种情况下由字体定义(字符串和cmets有特定的面)大多数编程语言主要模式)。它使用谓词回调函数,可以根据需要进行定义;我维护 TNT,它是 Emacs 的 AIM 模式,我们这样使用它:
(defun tnt-im-mode-flyspell-verify ()
"This function is used for `flyspell-generic-check-word-p' in TNT."
(not (get-text-property (point) 'read-only)))
(put 'tnt-im-mode 'flyspell-mode-predicate 'tnt-im-mode-flyspell-verify)
(put 'tnt-chat-mode 'flyspell-mode-predicate 'tnt-im-mode-flyspell-verify)
关于flyspell vs. speck vs. wcheck——我只使用了flyspell模式。 speck 似乎非常注重可见的内容,这很好,但通常我希望对我正在处理的所有文档进行拼写检查,所以我不希望那样做。 wcheck 似乎是外部程序的通用接口;我猜你将不得不自己建立它的使用。 flyspell 可以使用两种不同的方式:as-you-type,这是我通常使用的方式,以及“批处理模式”,其中一次检查整个区域或缓冲区。前者速度快得令人难以置信,而且我从来没有找到寻找更好工具的理由。后者可能有点慢,特别是当有很多拼写错误的单词并且文档很大时,但我真的不记得等待超过 15 秒才能完成。看着屏幕 15 秒,什么也不做,看起来很长,其实不然。当然是 YMMV。
底线:我会坚持使用 flyspell-mode,当然前提是它满足您的需求。