Jak skonfigurować hunspell na komputerze z systemem Windows?

10

Mam swoje słowniki hunspell w C:\hunspell\. Zawiera on .dici .affpliki dla trzech językach: en_GB, en_US, i nb_NO. Znajdujące się w Internecie opisy, jak sprawić, by hunspell działało w Emacsie, wprawiają mnie w zakłopotanie.

Jakiego minimalnego kodu potrzebuję w pliku init, aby móc używać tych trzech słowników hunspell w Emacsie?

Wypróbowałem następujący kod sugerowany przez jedną stronę internetową:

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

Ale gdy chcę zmienić słownik M-x ispell-change-dictionary, otrzymuję następujący komunikat:

ispell-phaf: Brak pasującego wpisu dla zero.

myotis
źródło

Odpowiedzi:

4

Konfiguracja Emacsa:

(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)))

Ustawienia słownika Hunspell:

Uruchom hunspell -Dw oknie dos, które wyświetli listę hunspell katalogów szukających słowników. Skopiuj swoje słowniki do tego katalogu. Jest to minimalna wymagana konfiguracja.

Więcej informacji technicznych można znaleźć na stronie http://blog.binchen.org/posts/what-s-the-best-spell-check-set-up-in-emacs.html .

Chen Bin
źródło
Pracował dla mnie! Moje ustawienie use-packageto(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
Po prostu zrób (setq ispell-program-name "c: /what-ever-path/hunspell.exe") w Windows 10 dla hunspell bez innych konfiguracji konfiguracji sprawdzania pisowni w języku angielskim.
Yu Shen
2

Jakiś czas temu natknąłem się na ten problem. Jeśli dobrze pamiętam, przyczyną tego komunikatu o błędzie jest to, że hunspellnie można się skonfigurować w oparciu o bieżące środowisko. Aby to naprawić, musisz skonfigurować hunspellokreślone ispellzmienne. Poniższy kod powinien wystarczyć do skonfigurowania hunspell dla słowników angielskich:

(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)

Ważną częścią jest to ispell-hunspell-dictionary-alist, że należy wypełnić odpowiednią listę słowników, taką jak ta podana w ispell-local-dictionary-alist.

Jest jednak sporo szczegółów dotyczących tej listy. Jeśli chcesz dowiedzieć się więcej na ten temat, przeczytaj M-x describe-variable ispell-local-dictionary-alist.

Xaldew
źródło
+1 wydaje się, że coś jest nie tak z domyślną próbą wypełnienia ispell-hunspel-dictionary-alist. Zamiast (require 'flyspell)zastanowić się(with-eval-after-load "ispell" ...)
Andrew Swann,
1

Zainstaluj wszystkie potrzebne słowniki w miejscu, w którym hunspell wyszukuje; znajdź to z hunspell -D. Po zainstalowaniu to polecenie powinno je pokazać.

W pliku inicjującym dodaj po prostu dodaj jeden z nich, np. Mam en_GBi en_USzainstalowane słowniki. Mam w moim pliku init to:

(setenv "DICTIONARY" "en_GB")

Po otwarciu Emacsa po prostu włącz flyspell-mode. Emacs powinien powiedzieć, że jest uruchomiony ispell z domyślnym słownikiem. W en_GBnaszym przykładzie oznacza to działanie. Teraz, jeśli chcesz się przełączyć, po prostu zrób M-x ispell-change-dictionaryi podaj nową nazwę słownika np en_US. Teraz drugi słownik powinien działać. O tym ponownie poinformuje Emacs, mówiąc, że zaczął ispell, ale tym razem ze en_USsłownikiem.

legends2k
źródło
1

Zakładając, że używasz najnowszej wersji Emacsa (24.4 lub nowszej, o ile pamiętam), wszystko, co musisz zrobić, to upewnić się, że używasz poprawnej nazwy słownika, a Emacs zrobi resztę automatycznie.

Głównym problemem jest to, że system Windows używa innego formatu opisu języka, na przykład brytyjski angielski nazywa się ENG , a angielski amerykański to ENU . Oznacza to, że pliki słowników powinny mieć nazwy ENU.dic i ENU.aff dla języka angielskiego w USA oraz ENG.dic i ENG.aff dla języka angielskiego w Wielkiej Brytanii.

Może być również konieczne posiadanie „domyślnego” słownika lub hunspell może nie być zbyt szczęśliwy. Możesz także ustawić zmienną środowiskową SŁOWNIK, aby wymusić ustawienie domyślne.

Niestety nie mogę ustalić, jak powinien się nazywać twój słownik norweski. Jeśli używasz norweskich ustawień regionalnych w systemie Windows, powinieneś być w stanie sprawdzić w Emacsie, oceniając:

(getenv "LANG")

Który pokaże ci ustawienie, którego używa Emacs.

Alan Third
źródło
0

To tylko przypuszczenie, ale może musisz powiedzieć, którego języka chcesz użyć jako „domyślnego”:

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

Wartość domyślna ispell-dictionaryto nil, więc może to być przyczyną Twojego problemu.

Mark Karpov
źródło
Dzięki, Mark, za twoją wskazówkę, ale niestety to nie zmienia mojej sytuacji. Komunikat o błędzie wciąż pojawia się
myotis