12

有没有人有一个工作设置hunspellEmacs?简单地设置ispell-program-namehunspell不起作用,输出(例如,当使用 flyspell 时)如下所示:

-> UTF-8 encoding error. Missing continuation byte in 0. character position: - 9631: word not found

(我的文件通常以 UTF-8 编码)

我见过一些不同的设置,但它们都以某种方式失败了。如果编码工作正常,它通常很难找到正确的字典。

有工作解决方案的人吗?能够在两个词典之间切换会很好(默认应该是瑞典语词典和次要英语),但是运行任何东西会更好。

4

3 回答 3

15

如果您收到 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-hugeUbuntu 上可用的字典,但是aspell当我试图扩大它的视野时,它在很多方面都死了。也许我会更幸运hunspell——我们会看到的。

于 2010-11-06T02:30:12.243 回答
0

http://www.mail-archive.com/gnu-emacs-sources@gnu.org/msg01709.html

于 2010-10-19T06:30:59.873 回答
0

来自https://passingcuriosity.com/2017/emacs-hunspell-and-dictionaries/

添加

;; Set $DICPATH to "$HOME/Library/Spelling" for hunspell.
(setenv
  "DICPATH"
  "/path/to/hunspell/dictionary")
;; Tell ispell-mode to use hunspell.
(setq
  ispell-program-name
  "hunspell")

进入你的~/.emacs.

我的字典文件位于/usr/share/hunspell.

于 2017-02-23T22:09:01.473 回答