Emacs 如何将elisp写入自动更正错误的变量

Emacs 如何将elisp写入自动更正错误的变量,emacs,elisp,autocorrect,Emacs,Elisp,Autocorrect,假设我写了 var longlongname = 1; 我把它拼错了,linglongname。如何找到一个包或编写一个函数来更正它 (有时我很懒,宁愿触发一个键来修复之前的拼写错误,而不是移动光标并手动更正。)听起来像是一个有趣的Elisp练习。实现所需功能的配方: 为缓冲区中出现的所有单词建立字典 计算所有这些单词与相关单词之间的Levenshtein距离 根据Levenshtein距离,用最相似的单词替换有问题的单词 Levenshtein距离很容易计算。它基本上计算了为了将一个单词

假设我写了

var longlongname = 1;
我把它拼错了,linglongname。如何找到一个包或编写一个函数来更正它


(有时我很懒,宁愿触发一个键来修复之前的拼写错误,而不是移动光标并手动更正。)

听起来像是一个有趣的Elisp练习。实现所需功能的配方:

  • 为缓冲区中出现的所有单词建立字典
  • 计算所有这些单词与相关单词之间的Levenshtein距离
  • 根据Levenshtein距离,用最相似的单词替换有问题的单词

Levenshtein距离很容易计算。它基本上计算了为了将一个单词转换成另一个单词而必须对其进行的更改的数量。我确信有人已经在Elisp中实现了Levenshtein距离。在更高级的解决方案中,您可能可以使用语法表将字典缩小到实际上是变量的标记。如果存在多个具有最小Levenshtein距离的令牌,则必须在替换之前提示用户。如果最近匹配的Levenshtein距离高于某个阈值(例如,Levenshtein距离/两个单词中的字符总数>1/5),您可能根本不想替换,因为最接近的匹配项不够接近,无法成为可信的候选项。

在一般情况下,您要解决的问题是无法确定的

在特定情况下,可以将flymake与flyspell结合使用


与flymake结合使用对yor有用的其他软件包有
company
auto complete

对于普通文本文档,有
flyspell模式
。我认为您不会发现任何适合程序文本中变量名声明/定义的内容。在程序文本中,不清楚
linglongname
中的
ling
是否有特殊含义。对于变量引用,可以使用带有自动完成功能的
语义模式
。请尝试Emacs附带的库
completion.el
。它很旧了,但仍然很好用。一旦犯了这样的错误,它就不会纠正,但是(像其他完成库一样)它可以帮助防止这些错误。它允许您键入一些字符,并将它们(默认情况下使用
M-RET
C-RET
)填写到已键入或已在缓冲区或其他缓冲区中的术语。养成使用它的习惯,你就不会有长标识符的问题,如果一个字符一个字符地键入,它会绊倒你的手指。