是否有人为hunspell
和Emacs
设置了工作设置?只需将ispell-program-name
设置为hunspell
不起作用,输出(例如,使用flyspell时)如下所示:
-> UTF-8 encoding error. Missing continuation byte in 0. character position: - 9631: word not found
(我的文件通常以UTF-8编码)
我见过几种不同的设置,但他们都以某种方式失败了。如果编码工作得那么应该通常在查找正确的字典时遇到问题。
有工作解决方案的人吗?能够在两个字典之间切换(默认应该是瑞典字典和次要英语)会很好,但是运行任何东西都会更好。
答案 0 :(得分:14)
如果您收到UTF-8编码错误,则表示hunspell
进程正在使用指定其他编码的参数运行。例如,当我检查我的进程列表时,我会在启动时看到这个子进程到Emacs:
/usr/bin/hunspell -a -B -i iso-8859-1
ispell-get-coding-system
函数决定使用哪种编码,它通过检查似乎列出Emacs已知的每种语言的大ispell-dictionary-alist
变量来实现。该函数通常会从与您要检查的语言匹配的条目中删除最后一个符号。由于某种原因,我没有理会,这个列表对于英语有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大得多,但我看到它突出了一些相同的单词。哦,我会尝试另一种方法。我基本上想要一个可以加载Ubuntu上可用的/usr/share/dict/american-english-huge
字典的拼写检查器,但是当我试图扩展其视野时,aspell
在许多方面死亡。也许我会更幸运hunspell
- 我们会看到。
答案 1 :(得分:0)