【问题标题】:Which algorithm is used to implement search for files in Visual Studio Code / Google Chrome Developer / Sublime (Ctrl+p or Cmd+p)?在 Visual Studio Code/Google Chrome Developer/Sublime(Ctrl+p 或 Cmd+p)中使用哪种算法实现文件搜索?
【发布时间】:2018-08-14 18:35:01
【问题描述】:

Sublime 强大的搜索功能给我留下了深刻的印象,我们后来在 Visual Studio Code 和 Google Chrome Developer 中发现了它。

我猜一个非常基本的搜索算法可能会使用 Trie,但是这种对 Sublime 等文件的搜索似乎是某种多方向的 Trie(如果有这样的东西!),即如果你有一个像这样的文件名:

“我是一个非常大的漂亮创建文件和东西-else.js”

然后你搜索“created file”、“file created”、“something-beautifully”、“else big”、“big else”或来自该文件名的任何其他字符串组合,Sublime 和 Visual Studio 代码会找到它和其他具有相似名称的文件,立即。 (虽然 Google Chrome 开发者版本不是很强大,但这不是重点)。

所以,我稍微研究了 Visual Studio 的源代码,但仍然无法弄清楚搜索是如何实现的以及使用了哪种算法。我不是在寻找它的代码。只需要了解如何实现这个为我们开发人员节省大量时间的强大功能的高级理论。

【问题讨论】:

  • 我不了解 VS Code 或 Chrome,Sublime 是封闭源代码和专有的,但可能this blog post 会给你一些想法。
  • @OdatNurd 确实很有帮助。谢谢。 :)
  • 我希望 VSCode 能把他们的改成更像 Sublime 的...
  • @ScottStafford 崇高的有什么不同?
  • 我不太清楚,因为它是不透明的。但感觉就像它在列表中更快更高地找到我想要的文件。它还感觉它会记住您使用某些搜索字符串选择的内容,从而了解您。不过不确定,我没有系统地研究过。

标签: visual-studio-code google-chrome-devtools sublimetext3


【解决方案1】:

可以通过查看调用此函数时发生的情况来跟踪您正在寻找的 VS Code 功能:

https://github.com/microsoft/vscode/blob/master/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts#L365

这里有一个有趣的部分(仅过滤第一项,然后过滤整个过滤器):

https://github.com/microsoft/vscode/blob/d1220da07267242e9b58193da0ded43bbe7f2aa5/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts#L570

如果你从那里挖掘,你会发现大部分有用的东西都重新组合在这个文件中:

https://github.com/microsoft/vscode/blob/master/src/vs/base/common/fuzzyScorer.ts

一些注意事项:

模糊搜索非常严格,如果未找到单个字母或未按正确顺序找到字母,则过滤器将不匹配。一个关键优势是您可以突出显示结果中的匹配部分,它可以非常清楚地说明您的用户正在发生什么。

模糊评分器根据匹配的标签/描述[/路径]对结果进行评分(对于文件,标签 = 文件名,描述 = 没有名称的路径)。

【讨论】:

    【解决方案2】:

    【讨论】:

    • Chromium 的 DevTools 算法在 IMO 方面不够好。要使其正常工作,您必须按顺序键入搜索的单词。例如如果您的目标文件名为“chromium-dev-tool-dummy-file.txt”并且您搜索“tool dev chromium”,则该文件将不会出现。在 Visual Studio 中,您可以搜索这些词的任意组合,搜索结果将按预期工作。
    猜你喜欢
    • 2021-10-16
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多