Windows 7,Emacs 25.1
我需要拼写检查"飞行"对于我的自定义文本(例如,强调不正确的单词)。但我用两种语言撰写文本:英语和俄语。我希望在两种语言的拼写检查之间轻松切换。
最好的emacs包是什么?感谢。
答案 0 :(得分:3)
你想要这个:guess_language.el
(use-package guess-language ; Automatically detect language for Flyspell
:ensure t
:defer t
:init (add-hook 'text-mode-hook #'guess-language-mode)
:config
(setq guess-language-langcodes '((en . ("en_GB" "English"))
(it . ("it_IT" "Italian")))
guess-language-languages '(en it)
guess-language-min-paragraph-length 45)
:diminish guess-language-mode)
或者,如果您只想循环使用它们:
(defvar mu-languages-ring nil "Languages ring for Ispell")
(let ((languages '("en_GB" "it_IT")))
(validate-setq mu-languages-ring (make-ring (length languages)))
(dolist (elem languages) (ring-insert mu-languages-ring elem)))
(defun mu-cycle-ispell-languages ()
(interactive)
(let ((language (ring-ref mu-languages-ring -1)))
(ring-insert mu-languages-ring language)
(ispell-change-dictionary language)))
这些应与FlySpell
一起使用答案 1 :(得分:0)
我遇到了类似的问题,我找到的解决方案可以在不使用 guess_language 包的情况下同时管理两种或多种语言。此解决方案基于 Hunspell 拼写检查器。
系统: Windows 7 SP1,GNU Emacs 26.1
首先,在 Hunspell 安装后执行 Ispell/Hunspell 配置。在 .emacs 文件中插入下一个代码,通常位于 C:/Users/Account 中。
;; START BLOCK1 <-- Ispell/Hunspell setting
;; e.g., "C:/Hunspell/bin/hunspell.exe"
(setq-default ispell-program-name "hunspell.exe FULL PATH")
(setq-default ispell-extra-args '("--sug-mode=ultra"))
;; Set "DICTDIR" variable, e.g., "C:/Hunspell/share/hunspell"
(setenv "DICTDIR" "hunspell DICTIONARY PATH")
;; Uncomment next line to set English or another dictionary
;; (setq ispell-dictionary "en_US")
;; Automatically enable flyspell-mode in text-mode
(setq text-mode-hook '(lambda() (flyspell-mode t) ))
(require 'ispell)
;; END BLOCK1 <-- Ispell/Hunspell setting
此代码基于另一个讨论的拼写配置部分,请参阅M Parashar - Load Theme。块代码 1 适用于默认字典,可以更改带有 ispell-dictionary 变量的行的注释。这段代码非常适合我。
第二个代码块使我们能够使用多个字典,基于 AM Lafon - Multi Spell Checking。对我来说,此代码块仅适用于代码块 1 的下一个。
;;START BLOCK2<-- Multiple dictionaries. Only works with BLOCK1
(with-eval-after-load "ispell"
;; Configure `LANG`, otherwise ispell.el cannot find a 'default
;; dictionary' even though multiple dictionaries will be configured
;; in next line.
(setenv "LANG" "es_ES")
;; English/spanish configuration.
(setq ispell-dictionary "en_US,es_ES")
;; 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_US,es_ES")
;; For saving words to the personal dictionary, don't infer it from
;; the locale, otherwise it would save to ~/.hunspell_de_DE.
(setq ispell-personal-dictionary "~/.hunspell_personal"))
;; The personal dictionary file has to exist, otherwise hunspell will
;; silently not use it.
(unless (file-exists-p ispell-personal-dictionary)
(write-region "" nil ispell-personal-dictionary nil 0))
;;END BLOCK2<-- Multiple dictionaries. Only works with BLOCK1
这两个代码块同时启用了英语/西班牙语的拼写检查。可以将更多语言添加到检查系统中,使用适当的字典名称扩展“en_US,es_ES
”字符串。我使用了位于 Share/Hunspell 目录中的那些。没有在语言之间切换的键绑定,也没有在文件开头分配每个文件的字典,如下所示:
# -\*- ispell-dictionary: "castellano8" -\*-.
在拼写错误的单词上单击鼠标中键时会显示上下文菜单,其中一个选项是“保存单词”条目。这些单词将使用变量 ispell-personal-dictionary 保存在名为 .hunspell_personal 的新文件中,该文件位于通常的路径上。
包含两个代码块给出了预期的结果。仅包含第二个代码块就会抛出错误“错误类型参数 stringp nil”。