Як налаштувати hunspell на ПК з Windows?


10

У мене є свої словники hunspell C:\hunspell\. Вона містить .dicі .affфайли для трьох мов: en_GB, en_US, і nb_NO. Описи, які я знаходжу в Інтернеті про те, як змусити hunspell працювати в Emacs, збентежують мене.

Який мінімальний код мені потрібен у моєму файлі init, щоб мати можливість використовувати ці три словники 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: Немає відповідних записів для нуля.



Відповіді:


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у вікно дос, яке перелічить каталоги, які шукають словники. Скопіюйте свої словники до цього каталогу. Це мінімальна необхідна установка.

Див. 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.


+1, мабуть, щось не так із спробою заповнення за замовчуванням ispell-hunspel-dictionary-alist. Замість цього (require 'flyspell)ви можете подумати(with-eval-after-load "ispell" ...)
Ендрю Суонн

1

Встановіть усі потрібні словники в тому місці, в якому шукається пошук. знайдіть це за допомогою hunspell -D. Після встановлення ця команда повинна показувати їх.

У файл init додайте просто додайте один із них Напр. У мене en_GBта en_USсловники встановлені. У моєму файлі init це:

(setenv "DICTIONARY" "en_GB")

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


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.