15

Textmate 的“转到文件”模糊搜索真的很棒。

Wincent 的用于 vim 的 Command-T 插件做了类似的事情,它也很震撼。

有人可以解释这些是如何工作的吗?他们使用的方法有通用术语吗?

编辑:关于这些工具的作用,我稍微详细一点

这些工具可让您在键入时缩小选项列表(在本例中为文件路径)。

例如,如果我有以下文件:

/app/models/people.rb
/app/models/address.rb
/app/person.rb
/person.rb

要将列表缩小到/app/models/people.rb我可以键入以下任何内容:

amp
peo
mp
modelsp

它非常灵活,当我使用的应用程序没有它时,我发现我自己错过了这个“列表缩小”。我想了解更多关于它的信息,以便在我觉得有需要时可以实现自己的插件。希望我能更好地解释它,但这就是我在这里的原因:)

要查看它的实际效果,请查看 wincent 的command-t 演示

4

5 回答 5

3

它似乎在每个字母之间进行通配符搜索。

amp -> *a*m*p*
peo -> *p*e*o*
mp  -> *m*p*
modelsp -> ...

如果它只匹配选项列表中的一项,那么它将作为预期选项返回。

于 2011-08-02T19:20:18.910 回答
2

看起来这是您正在谈论的确切代码:

https://github.com/textmate/textmate/blob/master/Frameworks/text/src/ranker.cc

于 2013-06-13T09:17:17.730 回答
2

看起来 Command-T 根据函数double给出的分数进行排序以进行模糊搜索。Command-T 的源代码版权归作者所有,但可以通过在文本编辑器中打开 vimball 找到源代码(在本页底部下载),并且可能用作更通用的模糊搜索算法的灵感(由某人谁至少比我读C好)。recursive_matchmatch.c

于 2011-05-23T06:07:17.087 回答
0

不知道这是如何工作的,但对于快速查找,您可以生成类似于http://en.wikipedia.org/wiki/Directed_acyclic_word_graph的内容,并且具有 O(L) 复杂度,其中 L 是搜索模式的长度。

于 2011-05-23T09:29:10.630 回答
0

作为旁注:看看(Apache Solr)及其生成索引的方式。当我尝试在网络上实现类似于 Textmate 的 Command-T 的东西时,我发现自己经常使用它。

具体检查EdgeNGramFilterFactory。我相信某处甚至可能有一些源代码。(虽然它是在 Java 中......)

于 2011-07-26T14:14:11.487 回答