最近才知道,原来 Emacs 26 开始,Emacs 就支持了 Enchant,通过这个拼写检查前端可以支持其他 Emacs 不支持的拼写检查后端(如AppleSpell,Nuspell等等),而且它还支持多个后端一起使用,支持多种语言(我只用英语)。
在macOS上安装:
sudo port install enchant2
# 或者
brew install enchant
在配置文件~/.config/enchant/enchant.ordering
加上下面的配置就会使用 macOS 自带的 AppleSpell:
*:AppleSpell
详细可以参考 Enchant 官方文档
在 Windows 上安装
Windows 上可以通过 msys2 的 mingw64 安装:
pacman -S mingw64/mingw-w64-x86_64-enchant
在配置文件 C:\Users\<username>\AppData\Local\enchant\enchant.ordering
中这样设置就会用多个后端。
*:nuspell,aspell,hunspell
en_US:nuspell,aspell,hunspell
Emacs 配置
(ispell-program-name "enchant-2")
(ispell-dictionary "english")
以下是我的个人配置,配合 flyspell 和 flyspell-correct 使用:
7 个赞
可以结合jinx使用了。
把中文给排除掉,不然一片红。
(add-to-list 'jinx-exclude-regexps '(t "\\cc"))
感觉比 flyspell 快。
3 个赞
用上了,不过在 emacs-lisp-mode 还不是很好用。要是能排除注释中的 Elisp 代码更好了。
速度其实快。输入字符的过程中,检查的太快,手速跟不上就会提示红线,还有待提升。
为什么会检查中文,我的 enchant 并不会检查中文,用的 AppleSpell
不知道啊,你是怎么设置的?我不排除中文,org-mode中全标红。
我就是用的上面图中的官方默认设置。
enchant 的配置文件~/.config/enchant/enchant.ordering
只有下面这行
*:AppleSpell
jinx 在 Windows 上还有点问题,识别不了安装的字典。
Jinx: No dictionaries available for ‘jinx-languages’ = "en_US" [2 times]
enchant 配置文件和你的一样,jinx 配置
(use-package jinx
:hook (org-mode . jinx-mode)
:bind ("C-c c" . jinx-correct)
:config
(setq jinx-languages '("en")))
打开一个 org 文档,中文下全标红。
apellspell 是系统默认的。应该没有中文词典吧?
那就不知道是啥原因了,你的中文不标红。没有中文相关词典
SPQR
12
太好用了这个包,速度快,而且配置简单,只需要设置一下jinx-languages
,至于后端只需要装enchant和任意一个enchant支持的后端就行
切换到 Enchant 后,执行(flyspell-prog-mode)会有2-3秒的卡顿,好像是在后台启动ispell进程。你们有这种情况吗
已经切换到 jinx,Windows 下通过手动链接 enchant 和 aspell 的库到 Emacs 的 lib 目录,目前也能正常使用了。
在 powershell 中执行以下操作就行:
New-Item -ItemType SymbolicLink -Path D:\opt\emacs\lib\aspell-0.60 -Target D:\msys64\ucrt64\lib\aspell-0.60
New-Item -ItemType SymbolicLink -Path D:\opt\emacs\lib\enchant-2 -Target D:\msys64\ucrt64\lib\enchant-2
另外,在 Windows 平台和 Linux 下,要排除下中文,可通过下面的设置实现:
(with-eval-after-load 'jinx
(let ((st jinx--base-syntax-table))
(modify-syntax-entry '(#x4E00 . #x9FFF) "_" st) ; CJK Unified Ideographs
(modify-syntax-entry '(#x3400 . #x4DBF) "_" st) ; CJK Unified Ideographs Extension A
(modify-syntax-entry '(#x20000 . #x2A6DF) "_" st) ; CJK Unified Ideographs Extension B
(modify-syntax-entry '(#x2A700 . #x2B73F) "_" st) ; CJK Unified Ideographs Extension C
(modify-syntax-entry '(#x2B740 . #x2B81F) "_" st) ; CJK Unified Ideographs Extension D
(modify-syntax-entry '(#x2B820 . #x2CEAF) "_" st) ; CJK Unified Ideographs Extension E
(modify-syntax-entry '(#x2CEB0 . #x2EBEF) "_" st) ; CJK Unified Ideographs Extension F
(modify-syntax-entry '(#x30000 . #x3134F) "_" st) ; CJK Unified Ideographs Extension G
(modify-syntax-entry '(#x31350 . #x323AF) "_" st) ; CJK Unified Ideographs Extension H
(modify-syntax-entry '(#x2EBF0 . #x2EE5F) "_" st) ; CJK Unified Ideographs Extension I
))
参考 How to disable check Chinese character · Issue #4 · minad/jinx · GitHub