Rechtschreibprüfung mit mehreren Wörterbüchern

14

Wie kann ich mit der Emacs-Rechtschreibprüfung mehrere Wörterbücher verwenden? Insbesondere möchte ich gleichzeitig ein britisches Englisch-Wörterbuch und ein medizinisches Englisch-Wörterbuch verwenden.

Divinenephron
quelle
Benutzt du flyspell?
PythonNut
Ja, ich benutze flyspell.
Divinenephron
Die Lösung kann flyspell, muss aber nicht. Auf diese Weise können die Antworten für mehr Personen relevant sein.
Divinenephron

Antworten:

16

Hunspell kann die Rechtschreibprüfung mit mehreren Wörterbüchern durchführen, und Sie können dies so konfigurieren, dass es mit Emacs funktioniert. So mache ich das unter OS X 10.11 mit Emacs 25.0. Es wird nicht mit älteren Emacsen funktionieren.

Installieren Sie Hunspell

brew install hunspell

Laden Sie Hunspell-Wörterbücher von LibreOffice und OpenMedSpel herunter .

cd ~/Downloads/

curl http://extensions.libreoffice.org/extension-center/english-dictionaries/releases/2016.04.01/dict-en.oxt > dict-en.oxt
unzip dict-en.oxt en_GB.aff en_GB.dic

curl -L https://addons.mozilla.org/en-US/firefox/downloads/latest/6526/addon-6526-latest.xpi > openmedspel.xpi
unzip openmedspel.xpi dictionaries/OpenMedSpel.{aff,dic}
mv dictionaries/OpenMedSpel.dic en_US-med.dic
mv dictionaries/OpenMedSpel.aff en_US-med.aff

Legen Sie die Wörterbücher ein ~/Library/Spelling/.

mv *.aff *.dic ~/Library/Spelling/

Fügen Sie dies hinzu zu ~/.emacs/init.el:

(with-eval-after-load "ispell"
  (setq ispell-program-name "hunspell")
  (setq ispell-dictionary "en_GB,en_US-med")
  ;; ispell-set-spellchecker-params has to be called
  ;; before ispell-hunspell-add-multi-dic will work
  (ispell-set-spellchecker-params)
  (ispell-hunspell-add-multi-dic "en_GB,en_US-med"))
Divinenephron
quelle
Beachten Sie, dass die Funktion ispell-hunspell-add-multi-dicin älteren Versionen von anscheinend nicht vorhanden ist ispell.el, auch nicht in Emacs 24.5. Ich musste die neueste Datei unter github.com/emacs-mirror/emacs/blob/master/lisp/textmodes/… herunterladen und das Byte erneut kompilieren, damit es funktioniert.
xji
Ich benutze Emacs 25.0. Ich habe einen Hinweis hinzugefügt, der nur auf Emacs> = 25.0 funktioniert.
Divinenephron
Ich habe Emacs 25 installiert. Seltsamerweise habe ich jedoch den folgenden Fehler festgestellt: Symbol’s function definition is void: ispell-hunspell-add-multi-dicObwohl ich mir sicher bin, dass /usr/share/emacs/25.1.50/lisp/textmodes/ispell.elcdie Funktion vorhanden ist. Hast du eine Idee, wie es passiert sein könnte? Vielen Dank.
xji
Ich erkannte , dass es meine war ispell.elin /usr/share/emacs/site-lisp/der neueren Shadowing ispell.elin Emacs25 ... Siehe unix.stackexchange.com/questions/28483/... für alle , die das gleiche Problem sein begegnen könnten.
xji
2

Angenommen, Sie haben bereits en_US-med.dic und en_US-med.aff heruntergeladen und hunspell installiert

Führen Sie Schritt 1 hunspell -Din der Shell aus, die dem Verzeichnis mitteilt, in dem hunspell nach Wörterbüchern sucht. Kopieren Sie en_US-med.dic und en_US-med.aff in dieses Verzeichnis.

Schritt 2, fügen Sie den folgenden Code in ~ / .emacs ein,

(setq ispell-program-name "hunspell")
;; you could set `ispell-dictionary` instead but `ispell-local-dictionary' has higher priority
(setq ispell-local-dictionary "en_US")
(setq ispell-local-dictionary-alist '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US,en_US-med") nil utf-8)))

Tatsächlich übergeben wir die Option "-d en_US, en_US-med" an die hunspell-CLI, damit ZWEI Wörterbücher "en_US" und "en_US-med" gleichzeitig verwendet werden können.

Die "-d" -Optionen sind im hunspell-Handbuch ( man hunspellin der Shell) dokumentiert.

Hier ist der zitierte Text aus dem Hunspell-Handbuch:

-d en_US,en_geo,en_med,de_DE,de_med

       en_US  and  de_DE  are  base dictionaries, they consist of aff and dic
       file pairs: en_US.aff, en_US.dic and  de_DE.aff,  de_DE.dic.   En_geo,
       en_med,  de_med  are  special dictionaries: dictionaries without affix
       file. Special dictionaries are optional extension of the base  dictio‐
       naries  usually  with  special (medical, law etc.)  terms. There is no
       naming convention for special dictionaries, only the ".dic" extension:
       dictionaries  without affix file will be an extension of the preceding
       base dictionary (right order of the parameter list needs for good sug‐
       gestions). First item of -d parameter list must be a base dictionary.

Getestet auf Emacs 24.3, Debian 7 mit dem Wort "Fibrochondritis".

Sollte bei Emacs 23+ auf jedem Betriebssystem funktionieren .

Bitte beachten Sie, dass unter Windows der einfachste Weg, um der ausführbaren hunspell-Datei den Suchpfad für das Wörterbuch mitzuteilen, die Einrichtung einer Umgebungsvariablen ist DICTPATH(dies ist im hunspell-Handbuch dokumentiert). Es ist sehr wahrscheinlich, dass die ausführbare Hunspell-Datei von Cygwin / MSYS2 nur Pfade im UNIX-Format erkennt .

chen bin
quelle
Mit dieser Methode kann ich nicht mehrere Wörterbücher verwenden.
Divinenephron
Der Code, den ich gegeben habe, ist Multi-Wörterbuch.
Chen Bin
Ich verstehe, danke für den Hinweis - ich habe die -dOption nicht bemerkt .
Divinenephron
Nun, das scheint aus irgendeinem Grund nicht zu funktionieren. Wenn ich die Option -d in der Befehlszeile verwende, funktioniert es, aber in Emacs helm-flyspellscheint es irgendwie nur das Wörterbuch mit der Systemsprache zu verwenden.
xji
helm-flyspell könnte aspell verwenden.
Chen Bin