Làm cách nào để thiết lập hunspell trên PC Windows?


10

Tôi có từ điển hunspell của tôi tại C:\hunspell\. Nó chứa .dic.afffile cho ba ngôn ngữ: en_GB, en_US, và nb_NO. Các mô tả tôi tìm thấy trên web về cách làm cho hunspell hoạt động trong Emacs làm tôi bối rối.

Mã tối thiểu tôi cần trong tệp init của tôi để có thể sử dụng ba từ điển hunspell này trong Emacs là gì?

Tôi đã thử mã sau đây được đề xuất bởi một trang web:

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

Nhưng khi muốn thay đổi từ điển M-x ispell-change-dictionary, tôi nhận được thông báo sau:

ispell-phaf: Không có mục phù hợp cho nil.



Câu trả lời:


4

Thiết lập 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)))

Thiết lập từ điển Hunspell:

Chạy hunspell -Dtrong cửa sổ dos sẽ liệt kê các thư mục hunspell tìm kiếm từ điển. Sao chép từ điển của bạn vào thư mục đó. Đây là thiết lập tối thiểu bạn cần.

Xem http://blog.binchen.org/posts/what-s-the-best-spell-check-set-up-in-emacs.html để biết thêm chi tiết kỹ thuật.


Đã làm cho tôi! Thiết lập của tôi với 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

Chỉ cần làm (setq ispell-chương trình-tên "c: /what-ever-path/hunspell.exe") trong Windows 10 cho hunspell mà không có cấu hình khác hoạt động để kiểm tra chính tả tiếng Anh.
Yu Shen

2

Tôi đã gặp vấn đề này một mình trở lại. Nếu tôi nhớ lại chính xác, lý do bạn nhận được thông báo lỗi đó là vì hunspellkhông thể tự cấu hình dựa trên môi trường hiện tại. Vì vậy, để khắc phục nó, bạn cần cấu hình các biến hunspellcụ thể ispell. Đoạn mã sau phải đủ để thiết lập hunspell cho từ điển tiếng Anh:

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

Phần quan trọng là ispell-hunspell-dictionary-alist, nó phải được điền với một danh sách từ điển thích hợp, chẳng hạn như một trong đó được đưa vào ispell-local-dictionary-alist.

Có khá nhiều chi tiết xung quanh danh sách này mặc dù. Nếu bạn muốn biết thêm về nó, hãy đọc lên M-x describe-variable ispell-local-dictionary-alist.


+1 dường như có gì đó không đúng với nỗ lực mặc định để điền vào ispell-hunspel-dictionary-alist. Thay vì (require 'flyspell)bạn có thể cân nhắc(with-eval-after-load "ispell" ...)
Andrew Swann

1

Cài đặt tất cả các từ điển bạn muốn trong vị trí mà hunspell tìm kiếm trong; tìm thấy điều này với hunspell -D. Sau khi cài đặt, lệnh này sẽ hiển thị chúng.

Trong tệp init, thêm chỉ cần thêm một trong số chúng Ví dụ tôi có en_GBen_UStừ điển được cài đặt. Tôi, trong tập tin init của tôi, cái này:

(setenv "DICTIONARY" "en_GB")

Khi mở Emacs, chỉ cần kích hoạt flyspell-mode. Emacs nên nói rằng nó được bắt đầu ispell với từ điển mặc định. Điều này có nghĩa en_GBlà trong hành động, ví dụ của chúng tôi. Bây giờ nếu bạn muốn chuyển đổi, chỉ cần làm M-x ispell-change-dictionaryvà đặt tên từ điển mới Eg en_US. Bây giờ các từ điển khác nên được thực hiện. Điều này, một lần nữa, sẽ được thông báo bởi Emacs nói rằng nó đã bắt đầu ispell nhưng lần này là với en_UStừ điển.


1

Giả sử bạn đang sử dụng một phiên bản Emacs gần đây (24.4 trở lên, như tôi nhớ lại) thì tất cả những gì bạn cần làm là đảm bảo rằng bạn đang sử dụng tên từ điển chính xác và Emacs sẽ tự động làm phần còn lại.

Vấn đề chính là Windows sử dụng một định dạng mô tả ngôn ngữ khác, ví dụ tiếng Anh Anh được gọi là ANH và tiếng Anh Mỹ là ENU . Điều này có nghĩa là các tệp từ điển của bạn nên được gọi là ENU.dicENU.aff cho tiếng Anh Mỹ, và ANH.dicANH.aff cho tiếng Anh Anh.

Cũng có thể cần phải có một từ điển "mặc định" hoặc hunspell có thể không quá hạnh phúc. Bạn cũng có thể đặt biến môi trường DICTIONARY để buộc mặc định.

Thật không may, tôi không thể tìm ra từ điển Na Uy của bạn nên được gọi là gì. Nếu bạn đang sử dụng ngôn ngữ Na Uy trong Windows, bạn sẽ có thể kiểm tra trong Emacs bằng cách đánh giá:

(getenv "LANG")

Nó sẽ cho bạn thấy các thiết lập mà Emacs đang sử dụng.


0

Đây chỉ là một phỏng đoán, nhưng có lẽ bạn cần phải nói ngôn ngữ nào bạn muốn sử dụng làm ngôn ngữ mặc định

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

Giá trị mặc định ispell-dictionarynil, vì vậy có thể đây là nguyên nhân của vấn đề của bạn.


Cảm ơn Mark, vì tiền boa của bạn, nhưng thật không may, nó dường như không thay đổi tình hình của tôi. Thông báo lỗi vẫn bật lên
myotis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.