【问题标题】:How to write elisp to auto-correct misspelt variables如何编写 elisp 以自动更正拼写错误的变量
【发布时间】:2014-08-20 05:03:40
【问题描述】:

假设我写了

var longlongname = 1;

我把它拼错为 linglongname。我怎样才能找到一个包或编写一个函数来纠正它?

(有时我很懒,更喜欢触发一个键来修复以前拼写错误的单词,而不是移动光标并手动更正它。)

【问题讨论】:

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

标签: emacs elisp autocorrect


【解决方案1】:

你要解决的这个问题在一般情况下是不可判定的。

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

与flymake结合使用对你有用的其他软件包是company和auto-complete。

【讨论】:

    【解决方案2】:

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

    • 构建缓冲区中出现的所有单词的字典。
    • 计算所有这些单词到相关单词的 Levenshtein 距离。
    • 根据 Levenshtein 距离用最相似的词替换有问题的词。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 2023-02-11
      • 1970-01-01
      • 2014-04-29
      • 2012-07-07
      • 2011-07-15
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多