你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

sublime text 偏爱Sublime Text的原因:模糊搜索算法的工作机制与使用方法

发布时间:2025-05-16

浏览次数:0

Sublime Text 模糊搜索算法 _sublime text_ Sublime Text 文件搜索功能

我如此偏爱Text,是因为它具备一个很棒的功能,即模糊搜索算法。借助这个功能,我能够快速定位到具体的文件或者函数。在此之前,已有很多人在网上询问过该功能的具体实现方法。然而网上的答案没有一个能让人满意。所以我决定亲自为大家讲解这一功能的具体工作机制以及使用方法

如果你认为这篇文章的内容太过繁杂,那么下面这段文字或许能够满足你:

如果你不想阅读这些无趣的文字内容,你想直接看到最终的结果,这没关系,我不会责怪你。

互动演示实例:点击这里获取

源代码:C++;

进入正题

Text中的模糊匹配究竟是什么,为何我会认为这个功能很棒,我很高兴大家有这样的疑问。

有两个文件导航功能,它们功能非常强大,程序员使用起来也很顺手,其中一个专门用于搜索文件,另一个专门用于搜索特殊字符以及标记,比如函数和类名等,这两个功能的工作机制实际上是一样的。在这个功能的辅助下,我们无需在搜索框里输入准确的文件名,只需输入几个字符,它就能帮我们搜出想要的文件或函数。输入少量字符后,它会搜索目录下的文件,并对搜索结果进行智能排序。下图展示的便是我们的搜索结果。

 Sublime Text 文件搜索功能 _sublime text_Sublime Text 模糊搜索算法

我们能够看到,上图呈现的实际是代码文件的搜索结果,我于搜索栏中输入的是“clu”,经过系统智能排序后,显示在最上方的搜索结果是“.cpp”,在搜索结果里,具体匹配到的字符会加粗显示。

下图显示的是另一种形式的搜索结果。

Sublime Text 模糊搜索算法 _sublime text_ Sublime Text 文件搜索功能

在搜索栏中输入“agn”,之后显示出很多类型,我们只需键入少量关键字符,就能为我们显示出大多数与输入字符相匹配的文件内容。

灵感来源

其模糊匹配功能着实很棒,简直太棒了,我十分喜爱这个功能。遗憾的是,诸多其他类型的文本编辑器、IDE工具以及网站的搜索栏都不具备此功能。该功能极为强大且实用,我觉得所有搜索功能都应引入模糊匹配机制。

但是我想凭借自身努力改变这一现状。首先我要对模糊匹配功能展开深入分析与研究,进而发现其中奥秘。其次我会为大家提供该功能的源代码,其他现有项目能够直接运用这些源代码提升程序搜索性能。

实际上,我已在脑海中设想出几个该功能的特殊使用场景。我希望在编程过程中能使用这个功能。这包括搜索文件名、类名以及函数名等。然而,我想要实现的肯定远不止这些。

我是一名热衷于炉石游戏的玩家,在玩游戏时,寻找卡片是极为常见的任务,许多玩家也会在网上搜索相关内容,类似的网站能为广大玩家提供一定的帮助,另外,我还是卡片数据库的狂热支持者,比如.cards等网站 。

大多数与炉石有关的网站,仅为用户提供基本的子字符串匹配搜索。然而,若卡片名称是“the”,那么该卡片名称里含有子字符串“rag”吗?显然,卡片名称确实包含这个子字符串。但是若卡片名称是“Inner Rage”,“ ”,“Magma Rager”,或者是其他类似形式的字符串呢,其中是否包含子字符串“rag”呢,这一点值得思考,不过很明显,若输入“rtf”或者“ragrs”进行搜索,速度会更快,搜索结果也会更准确。

我个人觉得,在开展模糊匹配的进程中,搜索速度得确保快速,并且在对成千上万条记录开展搜索的进程中,还需要具备一定的交互功能。

功能讲解

要是大家对Text编辑器展开了深入分析,那么有两个地方,肯定会变得极为明显。

Text在进行模糊匹配时,会在搜索结果里尝试与每一个字符做匹配。

其模糊匹配算法中存在一种隐藏的评分机制,该机制会依据具体算法决定哪一个搜索结果更重要,还会按照评分顺序进行显示输出。

我们能够直接借助代码去实现第一个功能,其过程极为简单,具体代码如下所示:

 Sublime Text 文件搜索功能 _Sublime Text 模糊搜索算法 _sublime text

大家能够从上图中看到实现该功能的具体代码,我在自己的代码库中添加了该功能的C++版本sublime text,我这么做有自己的理由,这段代码能替换掉很多简单的子字符串匹配功能。

评分系统

最有意思的地方莫过于这个暗藏的评分机制了。系统会借助什么样的因素给搜索结果评分呢?系统又是依据什么来确定搜索结果的排序呢?首先,我对下面这几个影响因素展开了分析:

-匹配的字符

-不匹配的字符

-连续匹配的字符

-起始字符的位置

-字符后面是否跟有分隔符(如空格和下划线)

-大写字母后面是否跟有小写字母(即驼峰命名法)

这部分内容实际上很容易理解,依据匹配的字符来给搜索结果排序,随后排除不匹配的字符。

但是关键问题在于,系统怎样评判哪一个搜索结果该排在前面 ,我认为在这一点上,不存在唯一正确答案 ,数据权重应由数据集具体情况决定 ,并且文件路径与文件名不同时,文件后缀名常被忽略 ,对于单词,系统通常关注连续字符是否匹配,不会考虑分隔符和驼峰命名法这两个因素 。

大家若想了解它在对不同数据集进行搜索排序时采用的技术细节sublime text,我强烈建议大家去阅读源代码。

-初始评分为0

-检测到匹配字符:+0分

-检测到不匹配的字符:-1分

-检测到连续匹配的字符:+5分

-检测到分隔符:+10分

-检测到驼峰命名法:+10分

-检测到首字母不匹配:-3分(最多减9分)

总结

我极其喜爱Text,也喜欢它的模糊匹配算法。当下我正奋力尝试去开发出一款类似的软件,还要实现类似的功能。我感觉自己很快就要完成了!

其次,我会把自己开发出的源代码提交上去,我期望所有人都能从中受益。我不清楚我的项目有没有漏洞或者设计缺陷,所以对此感兴趣的朋友可以在我的上面留言。

互动演示:请点击这里获取

源代码:C++;

感谢大家的阅读!

 Sublime Text 文件搜索功能 _Sublime Text 模糊搜索算法 _sublime text

比特币赞助打赏地址:

请提供具体的句子内容,以便我进行改写。

要闻、干货、原创、专业

如有侵权请联系删除!

13262879759

微信二维码