如果您收到 UTF-8 编码错误,则表示该hunspell
进程正在使用指定其他编码的参数运行。例如,当我检查我的进程列表时,我会在 Emacs 启动后看到这个子进程:
/usr/bin/hunspell -a -B -i iso-8859-1
该ispell-get-coding-system
函数决定使用哪种编码,它通过检查ispell-dictionary-alist
似乎列出了 Emacs 已知的每种语言的大变量来实现。该函数通常会从与您要检查的语言匹配的条目中获取最后一个符号。出于某种我懒得弄清楚的原因,这个列表是iso-8859-1
针对英语的——而不是,你知道,关注实际缓冲区中的编码。我知道,这似乎没有任何意义。但我们继续。
您会认为您可以通过为变量设置自己的值来覆盖它,ispell-dictionary-alist
并将utf-8
其用作八个参数中的最后一个:
;; I could never get Emacs to pay attention to this
(setq ispell-dictionary-alist
'((nil "[A-Za-z]" "[^A-Za-z]" "[']" t ("-d" "en_US") nil utf-8)))
但我永远无法让这个设置真正起作用,无论我是否(load-library "ispell")
在我.emacs
的 .
;; Did not work for me either.
(eval-after-load "ispell" '(progn ...))
无论哪种方式,如果我启动一个新的 Emacs 并输入*scratch*
并键入ispell-dictionary-alist
并按下 Control-J,那么ispell
创建的巨大原始列表就会出现。每次。
因此,我决定对这个庞大列表的整个问题进行最终运行,并简单地将ispell-get-coding-system
函数重写为始终返回utf-8
。当然,下次我打开一个真正在iso-8859-1
.
要在我的文件中成功实现这一点.emacs
(好吧,~/.emacs.d/init.el
但是对于 Stack Overflow 的答案需要大量输入)需要以下代码:
;; It works! It works! After two hours of slogging, it works!
(if (file-exists-p "/usr/bin/hunspell")
(progn
(setq ispell-program-name "hunspell")
(eval-after-load "ispell"
'(progn (defun ispell-get-coding-system () 'utf-8)))))
我现在已经hunspell
像冠军一样工作了!不幸的是,我让它工作的全部原因是希望它的字典比 aspell 的字典大得多,但我看到它突出了一些相同的单词。哦,好吧,我会尝试另一种方法。我基本上想要一个拼写检查器,它可以加载/usr/share/dict/american-english-huge
Ubuntu 上可用的字典,但是aspell
当我试图扩大它的视野时,它在很多方面都死了。也许我会更幸运hunspell
——我们会看到的。