冰柱—— _
在大多数情况下,Icicles 是关于minibuffer的完成。在少数情况下,它为缓冲区内(例如代码)完成提供了一些东西,但主要是关于小缓冲区完成。
当大多数人想到 minibuffer 完成时,他们会想到文件名完成、缓冲区名完成和命令名完成。但还有很多。
作为一个 Emacs-Lisp 程序员,你可以在任何你想给用户交互选择的地方使用完成。这很一般!
完成实际上是关于定义集合的模式匹配,然后您可以对其进行操作。
大多数人认为 minibuffer 补全的唯一目的是选择一个名称(文件、缓冲区、命令、变量……)。但是完成的力量实际上是以不同的方式过滤并可能对完整的文件名、缓冲区名等进行排序,然后让用户对结果集(不一定是单个对象)做一些事情。
这就是Icicles的意义所在:让您使用模式匹配动态(增量)定义集合,然后作用于选定的成员或这些集合的所有成员。
这不是Ido或其他完成包的目标,可能除了Helm (Anything)。
与Helm (Anything)不同,它将对象名称优先于对象类型和操作作为其起点,在Icicles中,您通常调用命令对给定类型的一个或多个对象(例如缓冲区)执行某些操作,然后缩小范围这些对象的集合,通常通过名称匹配。在Icicles中,您通常可以在同一命令中以多种但相关的方式对这些对象进行操作。
在Helm (Anything)中,通常您的输入首先通过对象名称与所有类型对象的整个世界进行匹配,然后您缩小范围以选择一些要执行的操作。
最后,请记住,各种补全方法中的每一种都为最终用户提供了一些东西(例如命令),也为程序员提供了一些东西(例如完成功能)。
如果您正在执行代码完成,那么您通常只想在 point 处完成名称。代码完成的主要有趣之处在于确定合适的候选者是什么。为此,文本(例如代码)上下文通常是最重要的。为了提供明智的选择,完成功能需要分析上下文(代码),包括任何包含上下文(例如项目代码)。
另一方面,Minibuffer 完成可用于任何类型的选择和操作,包括具有多个操作的多项选择。在这里,所有部分都很有趣:提供什么候选人,你可以用他们做什么,等等。
不知道这是否有帮助,但无论如何这是我的看法。