Come configuro l'hunspell su un PC Windows?


10

Ho i miei dizionari hunspell su C:\hunspell\. Contiene .dice .afffile per tre lingue: en_GB, en_US, e nb_NO. Le descrizioni che trovo sul web su come far funzionare l'hunspell in Emacs mi rendono confuso.

Qual è il codice minimo di cui ho bisogno nel mio file init per poter usare questi tre dizionari hunspell in Emacs?

Ho provato il seguente codice suggerito da un sito Web:

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

Ma quando voglio cambiare dizionario M-x ispell-change-dictionary, ricevo il seguente messaggio:

ispell-phaf: nessuna voce corrispondente per zero.



Risposte:


4

Configurazione di 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)))

Configurazione del dizionario Hunspell:

Esegui hunspell -Dnella finestra dos che elencherà le directory hunspell alla ricerca di dizionari. Copia i tuoi dizionari in quella directory. Questa è l'impostazione minima necessaria.

Vedi http://blog.binchen.org/posts/what-s-the-best-spell-check-set-up-in-emacs.html per maggiori dettagli tecnici.


Ha funzionato per me! La mia installazione 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,

Basta fare (setq ispell-nome-programma "c: /what-ever-path/hunspell.exe") in Windows 10 per hunspell senza altre configurazioni per il controllo ortografico inglese.
Yu Shen,

2

Mi sono imbattuto in questo problema da solo qualche tempo fa. Se ricordo bene, il motivo per cui ricevi quel messaggio di errore è perché hunspellnon è in grado di configurarsi in base all'ambiente attuale. Quindi, per risolverlo, è necessario configurare le variabili hunspellspecifiche ispell. Il seguente codice dovrebbe essere sufficiente per configurare hunspell per i dizionari inglesi:

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

La parte importante è la ispell-hunspell-dictionary-alist, deve essere popolata con un elenco di dizionari adeguato, come quello indicato ispell-local-dictionary-alist.

Ci sono molti dettagli che circondano questo elenco però. Se vuoi saperne di più, sentiti libero di leggere M-x describe-variable ispell-local-dictionary-alist.


+1 sembra esserci qualcosa di sbagliato nel tentativo predefinito di popolare il file ispell-hunspel-dictionary-alist. Invece di (require 'flyspell)te potresti prendere in considerazione(with-eval-after-load "ispell" ...)
Andrew Swann il

1

Installa tutti i dizionari desiderati nella posizione in cui effettua la ricerca di hunspell; trovalo con hunspell -D. Una volta installato, questo comando dovrebbe mostrarli.

Nel file init, aggiungi solo uno di essi, ad esempio ho installato en_GBe en_USdizionari. Ho, nel mio file init, questo:

(setenv "DICTIONARY" "en_GB")

All'apertura di Emacs, basta abilitare flyspell-mode. Emacs dovrebbe dire che è stato avviato ispell con il dizionario predefinito. Questo significa che en_GBè in azione, per il nostro esempio. Ora se vuoi cambiare, basta fare M-x ispell-change-dictionarye dare il nome del nuovo dizionario, ad es en_US. Ora l'altro dizionario dovrebbe essere in azione. Questo, ancora una volta, verrà notificato da Emacs dicendo che ha avviato ispell ma questa volta con il en_USdizionario.


1

Supponendo che tu stia utilizzando una versione recente di Emacs (24.4 o successiva, come ricordo), tutto ciò che devi fare è assicurarti di utilizzare il nome di dizionario corretto ed Emacs farà automaticamente il resto.

Il problema principale è che Windows utilizza un formato di descrizione della lingua diverso, ad esempio l'inglese britannico si chiama ENG e l'inglese americano è ENU . Ciò significa che i file del dizionario devono essere chiamati ENU.dic e ENU.aff per l'inglese americano e ENG.dic e ENG.aff per l'inglese britannico.

Potrebbe anche essere necessario disporre di un dizionario "predefinito" o l'hunspell potrebbe non essere troppo felice. È inoltre possibile impostare la variabile di ambiente DICTIONARY per forzare un valore predefinito.

Purtroppo non riesco a capire come dovrebbe essere chiamato il tuo dizionario norvegese. Se stai usando le impostazioni locali norvegesi in Windows, dovresti essere in grado di controllare all'interno di Emacs valutando:

(getenv "LANG")

Che ti mostrerà l'impostazione che Emacs sta usando.


0

Questa è solo una supposizione, ma forse devi dire quale lingua vorresti usare come "predefinito":

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

Il valore predefinito ispell-dictionaryè nil, quindi potrebbe essere questa la causa del problema.


Grazie Marco, per il tuo consiglio, ma purtroppo non sembra cambiare la mia situazione. Il messaggio di errore viene ancora visualizzato
myotis il
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.