Controllo ortografico con più dizionari


14

Come posso usare più dizionari con il correttore ortografico Emacs? In particolare, desidero utilizzare contemporaneamente un dizionario inglese britannico e un dizionario inglese medico.


Stai usando flyspell?
PythonNut,

Sì, sto usando flyspell.
Divinenephron

La soluzione può utilizzare flyspellma non è necessario. In questo modo le risposte possono essere rilevanti per più persone.
Divinenephron

Risposte:


16

Hunspell può eseguire il controllo ortografico con più dizionari e puoi configurarlo per funzionare con Emacs. Ecco come lo faccio su OS X 10.11, con Emacs 25.0. Non funzionerà con Emacsen più vecchio.

Installa Hunspell

brew install hunspell

Scarica i dizionari Hunspell da LibreOffice e OpenMedSpel .

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

Inserisci i dizionari ~/Library/Spelling/.

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

Aggiungi questo a ~/.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"))

Si noti che la funzione ispell-hunspell-add-multi-dicsembra non essere presente nelle versioni precedenti di ispell.el, anche in Emacs 24.5. Ho dovuto scaricare il file più recente su github.com/emacs-mirror/emacs/blob/master/lisp/textmodes/… e compilarlo di nuovo in byte per farlo funzionare.
xji,

Sto usando Emacs 25.0. Ho aggiunto una nota a riguardo lavorando solo su Emacs> = 25.0.
Divinenephron,

Ho installato Emacs 25. Tuttavia, stranamente ho riscontrato il seguente errore:, Symbol’s function definition is void: ispell-hunspell-add-multi-dicsebbene ne sia sicuro /usr/share/emacs/25.1.50/lisp/textmodes/ispell.elc, la funzione è presente. Qualche idea su come potrebbe essere successo? Grazie.
xji,

Mi sono reso conto che era mio ispell.elnel mettere in /usr/share/emacs/site-lisp/ombra il nuovo ispell.elin Emacs25 ... Vedi unix.stackexchange.com/questions/28483/… per chiunque potesse riscontrare lo stesso problema.
xji,

2

Supponiamo di aver già scaricato en_US-med.dic e en_US-med.aff e di aver installato hunspell

Passaggio 1, esegui hunspell -Din shell, che indicherà la directory in cui hunspell cerca i dizionari, copia en_US-med.dic ed en_US-med.aff in quella directory.

Passaggio 2, inserisci il codice seguente in ~ / .emacs,

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

In realtà passiamo l'opzione "-d en_US, en_US-med" alla CLI di hunspell in modo che possa usare DUE dizionari "en_US" e "en_US-med" allo stesso tempo.

Le opzioni "-d" sono documentate nel manuale di hunspell ( man hunspellnella shell)

Ecco il testo citato dal manuale di hunspell:

-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.

Testato su Emacs 24.3, Debian 7 con la parola "fibrocondrite".

Dovrebbe funzionare su Emacs 23+ su qualsiasi sistema operativo .

Nota su Windows il modo più semplice per dire all'eseguibile di hunspell che il percorso di ricerca del dizionario è impostare la variabile d'ambiente DICTPATH(è documentata nel manuale di hunspell). È molto probabile che l'eseguibile hunspell di Cygwin / MSYS2 riconosca solo il percorso in formato UNIX .


Questo metodo non mi consente di utilizzare più dizionari.
Divinenephron

Il codice che ho fornito è multi-dizionario IS.
chen bin,

Vedo, grazie per averlo sottolineato - non ho notato l' -dopzione.
Divinenephron,

Beh, questo non sembra funzionare per qualche motivo. Quando uso l'opzione -d nella riga di comando funziona, ma in Emacs, helm-flyspellsembra in qualche modo usare il dizionario solo con la lingua di sistema.
xji,

helm-flyspell potrebbe usare aspell.
Chen Bin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.