什么是textmate的'Go to File'模糊搜索算法?

时间:2010-09-11 05:23:45

标签: algorithm textmate taxonomy fuzzy-search

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的demo of command-t

5 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

专门查看EdgeNGramFilterFactory。我相信甚至可能在某处有一些源代码。 (虽然它是用Java编写的......)