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
答案 0 :(得分:3)
似乎在每个字母之间进行通配符搜索。
amp -> *a*m*p*
peo -> *p*e*o*
mp -> *m*p*
modelsp -> ...
如果它只匹配选项列表中的一个项目,那么它会将其作为预期选项返回。
答案 1 :(得分:2)
看起来Command-T根据double
中recursive_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编写的......)