Как настроить hunspell на ПК с Windows?

10

У меня есть свои словари Hunspell в C:\hunspell\. Она содержит .dicи .affфайлы для трех языков: en_GB, en_US, и nb_NO. Описания, которые я нахожу в Интернете о том, как заставить работать Hunspell в Emacs, приводят меня в замешательство.

Какой минимальный код мне нужен в моем файле инициализации, чтобы иметь возможность использовать эти три словаря hunspell в Emacs?

Я пробовал следующий код, предложенный одним веб-сайтом:

(add-to-list 'exec-path "C:/hunspell/bin/")
(setq ispell-program-name (locate-file "hunspell"
                       exec-path exec-suffixes 'file-executable-p))

Но когда M-x ispell-change-dictionaryя хочу изменить словарь , я получаю следующее сообщение:

ispell-phaf: Нет подходящей записи для nil.

Myotis
источник

Ответы:

4

Настройка Emacs:

(setq ispell-program-name "c:/what-ever-path/hunspell")

;; "en_US" is key to lookup in `ispell-local-dictionary-alist'.
;; Please note it will be passed as default value to hunspell CLI `-d` option
;; if you don't manually setup `-d` in `ispell-local-dictionary-alist`
(setq ispell-local-dictionary "en_US") 

(setq ispell-local-dictionary-alist
      '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US") nil utf-8)))

Настройка словаря Hunspell:

Запустите hunspell -Dокно DOS, в котором будут перечислены каталоги, которые ищут словари. Скопируйте свои словари в этот каталог. Это минимальная настройка, которая вам нужна.

См. Http://blog.binchen.org/posts/what-s-the-best-spell-check-set-up-in-emacs.html для получения дополнительной технической информации.

чен бен
источник
Работал на меня! Моя установка с use-packageэто(use-package ispell :config (setq ispell-program-name "C:/Program Files (x86)/hunspell-1.3.2-3-w32-bin/bin/hunspell.exe") (setq ispell-local-dictionary "en_US") (setq ispell-local-dictionary-alist '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US") nil utf-8))))
Lorem Ipsum
Просто сделайте (setq ispell-program-name "c: /what-ever-path/hunspell.exe") в Windows 10 для hunspell без других настроек конфигурации для проверки правописания английского языка.
Ю Шен
2

Я сам столкнулся с этой проблемой некоторое время назад. Если я правильно помню, причина, по которой вы получаете это сообщение об ошибке, заключается в том, что hunspellон не может настроить себя в зависимости от текущей среды. Таким образом, чтобы исправить это, вам нужно настроить hunspellконкретные ispellпеременные. Следующего кода должно быть достаточно для настройки hunspell для английских словарей:

(require 'flyspell)
(setq ispell-dictionary "english")
(add-to-list 'ispell-local-dictionary-alist '(("english"
                                               "[[:alpha:]]"
                                               "[^[:alpha:]]"
                                               "[']"
                                               t
                                               ("-d" "en_US")
                                               nil
                                               utf-8)))
(setq ispell-hunspell-dictionary-alist ispell-local-dictionary-alist)

Важной частью является то ispell-hunspell-dictionary-alist, что он должен быть заполнен правильным словарным списком, таким как приведенный в ispell-local-dictionary-alist.

Есть довольно много деталей, окружающих этот список, хотя. Если вы хотите узнать больше об этом, не стесняйтесь читать M-x describe-variable ispell-local-dictionary-alist.

Xaldew
источник
+1, похоже, что-то не так с попыткой по умолчанию заполнить ispell-hunspel-dictionary-alist. Вместо того, чтобы (require 'flyspell)вы могли рассмотреть(with-eval-after-load "ispell" ...)
Эндрю Свонн
1

Установите все словари, которые вы хотите, в том месте, где ищет hunspell; найти это с hunspell -D. После установки эта команда должна показать их.

В файле инициализации добавьте только один из них, например, у меня есть en_GBи en_USсловари установлены. Я в своем файле инициализации это:

(setenv "DICTIONARY" "en_GB")

После открытия Emacs просто включите flyspell-mode. Emacs должен сказать, что он запускается ispell со словарем по умолчанию. Это означает, en_GBчто в действии, для нашего примера. Теперь, если вы хотите переключиться, просто сделайте M-x ispell-change-dictionaryи дайте новому словарю имя Eg en_US. Теперь другой словарь должен быть в действии. Это, опять же, будет уведомлено Emacs о том, что он запустил ispell, но на этот раз со en_USсловарем.

legends2k
источник
1

Предполагая, что вы используете последнюю версию Emacs (24.4 или выше, насколько я помню), все, что вам нужно сделать, это убедиться, что вы используете правильное имя словаря, а Emacs сделает все автоматически.

Основная проблема заключается в том, что Windows использует другой формат описания языка, например, британский английский называется ENG , а американский английский - ENU . Это означает, что ваши файлы словаря должны называться ENU.dic и ENU.aff для американского английского языка, а также ENG.dic и ENG.aff для британского английского.

Также может потребоваться иметь словарь «по умолчанию», или Hunspell может быть не слишком счастлив. Вы также можете установить переменную окружения DICTIONARY для принудительной установки значения по умолчанию.

К сожалению, я не могу понять, как должен называться ваш норвежский словарь. Если вы используете норвежскую локаль в Windows, вы сможете проверить в Emacs, оценив:

(getenv "LANG")

Который покажет вам настройки, которые использует Emacs.

Алан Третий
источник
0

Это всего лишь предположение, но, возможно, вам нужно указать, какой язык вы хотели бы использовать в качестве «по умолчанию»:

(setq ispell-dictionary "en") ; default dictionary

Значением по умолчанию ispell-dictionaryявляется nil, поэтому, возможно, это является причиной вашей проблемы.

Марк Карпов
источник
Спасибо Марк, за ваш совет, но, к сожалению, это не меняет мою ситуацию. Сообщение об ошибке все еще выскакивает
myotis