关于 Icicles --
大部分情况下,Icicles 是关于 迷你缓冲区 完成的。虽然有一些情况下它提供了一些针对缓冲区(例如代码)的完成,但它主要是关于迷你缓冲区的完成。
当大多数人想到迷你缓冲区完成时,他们会想到文件名完成、缓冲区名完成和命令名完成。但实际上它还有很多其他用途。
作为 Emacs-Lisp 程序员,您可以在任何需要与用户交互选择的地方使用完成。这非常通用!
完成真正关乎的是 模式匹配以定义集合,然后您可以操纵这些集合。
大多数人认为迷你缓冲区完成的唯一目的是选择单个名称(文件、缓冲区、命令、变量等)。但完成的强大之处在于以不同方式过滤和可能排序完整的文件名、缓冲区名等集合,然后让用户对结果的 集合(而不一定是单个对象)进行一些操作。
这就是 Icicles 的目的:让您使用模式匹配来 动态(增量地)定义集合,然后对所选成员或所有成员执行操作。
这不是 Ido 或其他完成包的主要目的,可能例外的是 Helm (Anything)。
与 Helm (Anything) 不同的是,在 Icicles 中,您通常会调用一个 命令以执行某些操作,并且针对给定的 类型(例如缓冲区)的一个或多个对象,然后通过名称匹配来缩小这些对象的集合。在 Icicles 中,通常情况下您可以在同一命令中以多种但相关的方式对这些对象进行操作。
在 Helm (Anything) 中,通常情况下,您的输入首先是根据对象名称与所有类型的对象的整个宇宙相匹配,之后再缩小选择一些操作。
最后,请记住,各种完成方法都为最终用户提供了一些东西(例如命令),也为程序员提供了一些东西(例如完成功能)。
如果你正在做代码补全,通常只需要在光标处完成名称。代码补全最有趣的事情就是确定适当的候选对象。为此,文本(例如代码)上下文通常是至关重要的。为了提供智能选择,补全功能需要分析上下文(代码),包括任何涵盖上下文(例如项目代码)。
另一方面,迷你缓冲区完成可以用于任何类型的选择和操作,包括具有多个动作的多个选择。这里,所有部分都很有趣:提供哪些候选项、你可以用它们做什么等等。
不知道这是否有帮助,但这是我的看法。