ฉันจะตั้งค่า hunspell บนพีซี Windows ได้อย่างไร


10

ฉันมีพจนานุกรม hunspell C:\hunspell\ของฉันที่ มันมี.dicและ.affไฟล์สำหรับสามภาษา: en_GB, และen_US nb_NOคำอธิบายที่ฉันพบบนเว็บเกี่ยวกับวิธีทำให้การล่าสัตว์ใน Emacs ทำให้ฉันสับสน

อะไรคือรหัสขั้นต่ำที่ฉันต้องการในไฟล์ init เพื่อให้สามารถใช้พจนานุกรม hunspell ทั้งสามนี้ใน Emacs ได้?

ฉันได้ลองใช้รหัสต่อไปนี้ที่แนะนำโดยเว็บไซต์เดียว:

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

แต่เมื่อต้องการเปลี่ยนพจนานุกรมโดยM-x ispell-change-dictionaryฉันได้รับข้อความต่อไปนี้:

ispell-phaf: ไม่มีรายการที่ตรงกันสำหรับไม่มี


: ที่เกี่ยวข้องทำงาน hunspell ทำกับ emacs และภาษาเยอรมัน
ตำนาน 2k

เช่นเดียวกับstackoverflow.com/q/56429761/1661465
serghei

คำตอบ:


4

การติดตั้ง 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)))

การตั้งค่าพจนานุกรม Hunspell:

เรียกใช้hunspell -Dในหน้าต่าง DOS ซึ่งจะแสดงรายการไดเรกทอรี hunspell ค้นหาพจนานุกรม คัดลอกพจนานุกรมของคุณไปยังไดเรกทอรีนั้น นี่คือการตั้งค่าขั้นต่ำที่คุณต้องการ

ดูhttp://blog.binchen.org/posts/what-s-the-best-spell-check-set-up-in-emacs.htmlสำหรับรายละเอียดทางเทคนิคเพิ่มเติม


ทำงานให้ฉัน! การตั้งค่าของฉัน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

เพียงทำ (setq ispell-program-name "c: /what-ever-path/hunspell.exe") ใน Windows 10 สำหรับ hunspell โดยไม่มีการกำหนดค่าอื่น ๆ ใช้งานได้สำหรับการตรวจสอบการสะกดคำภาษาอังกฤษ
Yu Shen

2

ฉันพบปัญหานี้ด้วยตัวเองครู่หนึ่ง หากฉันจำได้อย่างถูกต้องเหตุผลที่คุณได้รับข้อความแสดงข้อผิดพลาดนั้นเป็นเพราะhunspellไม่สามารถกำหนดค่าตัวเองตามสภาพแวดล้อมปัจจุบัน ดังนั้นเพื่อแก้ไขคุณต้องกำหนดค่าตัวแปรhunspellเฉพาะ ispellรหัสต่อไปนี้ควรจะเพียงพอที่จะติดตั้ง hunspell สำหรับพจนานุกรมภาษาอังกฤษ:

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

ส่วนที่สำคัญคือispell-hunspell-dictionary-alistจะต้องมีรายการพจนานุกรมที่เหมาะสมเช่นที่ให้ispell-local-dictionary-alistไว้

แม้ว่าจะมีรายละเอียดค่อนข้างน้อยรอบ ๆ รายการนี้ M-x describe-variable ispell-local-dictionary-alistหากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้รู้สึกอิสระที่จะอ่านได้ด้วย


+1 ispell-hunspel-dictionary-alistดูเหมือนว่าจะมีบางสิ่งบางอย่างผิดปกติกับความพยายามในการเริ่มต้นการเติม แทนที่จะเป็นเช่นนั้น(require 'flyspell)คุณอาจพิจารณา(with-eval-after-load "ispell" ...)
Andrew Swann

1

ติดตั้งพจนานุกรมทั้งหมดที่คุณต้องการในสถานที่ที่สามารถค้นหาได้ hunspell -Dพบนี้ด้วย เมื่อติดตั้งแล้วคำสั่งนี้จะแสดงพวกเขา

ในไฟล์ init ให้เพิ่มเพียงเพิ่มหนึ่งในนั้นเช่นฉันมีen_GBและen_USติดตั้งพจนานุกรม ฉันในไฟล์ init ของฉันนี้:

(setenv "DICTIONARY" "en_GB")

เมื่อเปิด Emacs flyspell-modeเพียงเปิดใช้งาน Emacs ควรจะบอกว่ามันเริ่มต้น ispell ด้วยพจนานุกรมเริ่มต้น นี่หมายถึงen_GBเป็นการใช้งานจริงสำหรับตัวอย่างของเรา ตอนนี้ถ้าคุณต้องการที่จะเปลี่ยนเพียงแค่ทำและให้ชื่อใหม่ในพจนานุกรมเช่นM-x ispell-change-dictionary en_USตอนนี้พจนานุกรมอื่นควรทำงาน นี้อีกครั้งจะได้รับแจ้งโดย Emacs บอกว่ามันเริ่ม ispell แต่คราวนี้กับen_USพจนานุกรม


1

สมมติว่าคุณกำลังใช้เวอร์ชั่นล่าสุดของ Emacs (24.4 หรือสูงกว่าที่ฉันจำได้) สิ่งที่คุณต้องทำคือให้แน่ใจว่าคุณใช้ชื่อพจนานุกรมที่ถูกต้องและ Emacs จะดำเนินการที่เหลือโดยอัตโนมัติ

ปัญหาหลักคือการที่ Windows ใช้รูปแบบคำอธิบายภาษาที่แตกต่างกันเช่นอังกฤษเรียกว่าภาษาไทยและภาษาอังกฤษของสหรัฐอเมริกาเป็นเ ซึ่งหมายความว่าไฟล์พจนานุกรมของคุณควรเรียกว่าENU.dicและENU.affสำหรับ US English และENG.dicและENG.affสำหรับ British English

นอกจากนี้ยังอาจจำเป็นต้องมีพจนานุกรม "เริ่มต้น" หรือ hunspell อาจไม่พอใจเกินไป คุณยังสามารถตั้งค่าตัวแปรสภาพแวดล้อมDICTIONARYให้บังคับค่าเริ่มต้นได้

น่าเสียดายที่ฉันไม่สามารถระบุพจนานุกรมภาษานอร์เวย์ของคุณได้ หากคุณใช้ภาษานอร์เวย์ใน Windows คุณควรสามารถตรวจสอบภายใน Emacs ได้โดยการประเมิน:

(getenv "LANG")

ซึ่งจะแสดงการตั้งค่าที่ Emacs ใช้


0

นี่เป็นเพียงการคาดเดา แต่คุณอาจต้องบอกภาษาที่คุณต้องการใช้เป็น“ ค่าเริ่มต้น”:

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

ค่าเริ่มต้นของispell-dictionaryคือnilดังนั้นอาจเป็นสาเหตุของปัญหาของคุณ


ขอบคุณ Mark สำหรับคำแนะนำของคุณ แต่น่าเสียดายที่ดูเหมือนจะไม่เปลี่ยนสถานการณ์ของฉัน ข้อความแสดงข้อผิดพลาดยังคงปรากฏขึ้น
myotis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.