flyspell-mode的替代品 wucuo(无错) 0.2.0 发布了

我用"- -run-together" 这个参数直接报错了,aspell都不工作,返回nil

我用的这个配置,是可以工作的。

(setq flyspell-issue-message-flag nil
         ispell-program-name "aspell"
         ispell-extra-args '("--sug-mode=ultra" "--lang=en_US" "--run-together"))
1 个赞

这个可以提高速度。如果命令行认为不是typo,那就肯定不是typo了。

命令行找出来的typo实际上应该是typo的候选项,可能是误判。所以要交给lisp写的predicate来判断。当然是命令行转交给predicate的数据越少越好。

另外Aspell 0.60.8支持camel case 检查了,以前版本那个run-together的算法有缺陷(不影响wucuo最终结果,但是对性能的提升没有0.60.8大)。How to spell check function/variable in Emacs | Chen's blog 这里我分析了aspell的代码。

原来Windows上通过msys2安装的aspell还是0.60.7版本,mac上brew安装的才是最新的0.60.8

牵涉到很多技术细节,可以见我的博客分类下的文章。我建议是只用flyspell的命令,可以用ispell的API,参考flyspell的代码如何使用api的。

有wucuo和flyspell+优化参数的性能比较吗?我试用了,感觉并不明显

看我emacs.d中定制的predicate。web-mode,js2-mode的predicate,文件越大,predicate越复杂,效果越明显。我在项目使用一段时间了。

wucuo提供关闭命令吗?好像只有start命令。

用了@seagle0128的参数“–run-together”可以使用,模式换成ultra感觉快了一点。 现在还是觉得flyspell实时更新更好用一些,wucuo可能更适合用于大文件需要检查(每次等20s更新状态感觉有点难受。)

关闭应该是直接关闭flyspell-mode 就可以了。

我改成2秒更新了。--run-together对应的算法有缺陷,见上文的链接。如果有兴趣的话建议读一下我spell checking系列的文章,这个问题我研究很久了。

大家在使用emacs写代码的时候没有感觉到使用拼写检查会感到打字卡顿吗?特别当快速打字的时候特别卡顿。我有时候也将auto-complete-mode也关闭,会拖慢打字速度。拼写检查一般不默认开启,确实需要进行语法检查的时候在开启使用。大家都在emacs中语法检查和auto-complete一直都开启吗?

flyspell的拼写检查我是这样用:
在prog-mode 下只检查注释部分,不检测代码
在text-mode下默认开启检查,关闭在org文件中的代码快检查
在dird-mode 和log类文件中自动关闭检查。

这样基本就没什么问题了。

多谢,回头自己研究一下,好好拜读下你的研究成果。 :smile:

只检查注释的话用flyspell-prog-mode就可以了。不需要wucuo。 wucuo的目的就是为了检查大量代码。比如我做web开发,各种新框架,新语法不断出来,但是语法检查器还没跟上或者暂时没有(比如ReactJS项目中用styled component, css in javascript。又比如临时写nosql的脚本,改CI的脚本,写json配置等等),那么拼写检查可以减少函数名和变量名写错的错误。

我很少写注释,所以flyspell-prog-mode对我不是刚需。

wucuo就是解决这个卡顿问题的同时还要增加功能。不需要关闭。大不了增加interval就行了。也有定制选项让你根本就不执行flyspell-buffer或者flyspell-region。见wucuo-spell-check-buffer-predicate,你加入自己定义的函数,返回nil,那么wucuo就什么也不干。所以也不需要关闭,每隔30秒执行一个空函数对性能不会有什么影响。

wucuo和flyspell-mode,flyspell-prog-mode是不能同时开启的,因为需要读写同一全局变量,我建议把后两者完全不用。

这个更新时间是不是可以改成用 run-with-idle-timer

大文件(1M)里每次保存检查整个buffer非常慢,建议给wucuo-spell-check-buffer-predicate加入一个默认的predicate检查buffer大小,或者检查的时候看一下buffer-size,太大了提示一下用户因为buffer太大检查会很慢。(不然第一次打开大文件的人会以为是Emacs的锅)

默认是检查可见区域。

C-x C-s保存文件的时候会卡10秒左右。