https://github.com/redguardtoo/wucuo
是目前最快最强大的拼写检查方案,完全取代了flyspell-mode
和flyspell-prog-mode
特点
原生完美支持camel case word检查,用hunspell和aspell都可以,不需要任何额外设置
性能极佳
功能强大,给用户充分定制的权限和工具
使用就是两行代码,
(add-hook 'prog-mode-hook #'wucuo-start)
(add-hook 'text-mode-hook #'wucuo-start)
13 个赞
给大佬点个赞
我发现我的hunspell还没配置过,有空试试看。
应该加上链接。我准备试用下,flyspell有点慢,谢谢大佬
编译报错啦, emacs27,大佬看看?
另外有个问题,怎么感觉ultra
比 lite
检查的更少,效率更高呢?是不是应该换一下更好?或者改个名字?
Compiling file ~/.emacs.d/elpa/wucuo-20200516.1526/wucuo.el at Sat May 30 16:42:45 2020
Entering directory ‘/Users/vincent/.emacs.d/elpa/wucuo-20200516.1526/’
In wucuo-split-camel-case:
wucuo.el:235:26:Error: ‘add-to-list’ can’t use lexical var ‘rlt’; use ‘push’
or ‘cl-pushnew’
In wucuo-generic-check-word-predicate:
wucuo.el:293:36:Warning: ‘font-lock-fontify-buffer’ is for interactive use
only; use ‘font-lock-ensure’ or ‘font-lock-flush’ instead.
In end of data:
wucuo.el:433:1:Warning: the function ‘symobol’ is not known to be defined.
修掉了,不好意思,我只测了源代码版本,ultra就是速度飞快的意思。随便起的名字了。原来还有full版本和flyspell-mode
纠缠不清。昨天终于想通了不再依赖flyspell-mode
改成normal和fast了。
总体来说,挺好用的。变量名大部分不会被检查了。
有个小问题请教下,对于camel case word 是怎么分割检查的?
像下图中的ftrName 是 featureName的缩写,这种情况是ftrName被当成一整个词来检查吗?
直接去抄了go的一个项目的算法把camel case word解析出来(我把他的go代码翻译成了lisp代码),
// Package camelcase is a micro package to split the words of a camelcase type
// string into a slice of words.
package camelcase
import (
"unicode"
"unicode/utf8"
)
// Split splits the camelcase word and returns a list of words. It also
// supports digits. Both lower camel case and upper camel case are supported.
// For more info please check: http://en.wikipedia.org/wiki/CamelCase
//
// Examples
//
// "" => [""]
// "lowercase" => ["lowercase"]
// "Class" => ["Class"]
// "MyClass" => ["My", "Class"]
// "MyC" => ["My", "C"]
This file has been truncated. show original
把sub word取出来。然后再起一个命令行程序检查。速度非常关键。由于Emacs Lisp单线程的原因,加更多功能就卡编辑器,所以为了提高性能我是绞尽脑汁了。
ftr命令行认为是非法单词。你可以定义个人词典包含ftr这个单词。
1 个赞
能否自己定义个人字典的位置?我看源码中是直接定义在home目录下的。
我是因为需要将个人字典放在icloud的盘上现实跨平台共享。
我通过下面的设置并没有生效:
(setq ispell-personal-dictionary "~/Documents/aspell/personal-dictionary") ;设置个人词典
更新:在 @Youmu 的帮助下,按照下面的设置,可以正常指定个人字典的路径了。
(setq ispell-dictionary "en_US"
ispell-program-name "aspell"
ispell-personal-dictionary (expand-file-name "~/Org/aspell/personal-dictionary/.aspell.en.pws"))
2 个赞
你可以看看ispell,flyspell怎么传参数给命令行的。可以参考 Posts about spell | Chen's blog
我个人不会使用云盘共享这些数据,牵涉到个人隐私。使用私有git repository更有效。
多谢,我去仔细看看。网盘安全性确实是值得考虑,特别icloud在前几年是出过事情的。
还有关于ispell的小问题请教一下,如下图中的featureName并没有被识别为错误,但是执行 M-x ispell ,按空格进行跳转的时候还是会进入这些词条。不知道是哪里的问题?
下图中的文字是在Org-mode,其他的prog-mode也是一样。
ispell和flyspell是两回事。
flyspell只不过利用了ispell的部分api。
你只能在ispell和flyspell中二选一。
我对ispell没有什么研究。
wucuo利用了flyspell的api,但是和flyspell-mode是两回事,只能二选一。
我只用flyspell-goto-next-error,偶尔使用flyspell-buffer。
明白了,谢谢。第一次用这个功能,以为二者是一回事。感谢解惑
哦,那用ultra、lite也无妨了。我记得以前为了速度,用过这个参数,不知道有用没有。
(setq ispell-extra-args '("--sug-mode=ultra" "--lang=en_US" "--run-together"))
Youmu
2020 年5 月 30 日 15:00
18
redguardtoo:
你只能在ispell和flyspell中二选一。
这两者是可以混合使用的,flyspell-mode
来提示哪里错了,修正时可以使用flyspell-correct-word-before-point
或者ispell-word
这里有个问题,有没有办法设置flyspell-correct-word-before-point
弹出窗口的颜色,或者用让它显示在minibuffer,不然它的颜色跟主题不一致,很突兀。
比较喜欢ispell那种,一直按空格就跳转修改,挺方便的,而且主题和emacs主题一致。