ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

FindInProject

Wramberg ST3

Sublime Text 3 项目文本搜索插件

标签 搜索, 搜索, 项目

详情

  • 0.3.0
  • github.com
  • github.com
  • 6年前
  • 5年前
  • 7年前

安装数

  • 总数 1K
  • Win 557
  • Mac 292
  • Linux 217
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日
Windows 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Mac 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

README

源代码
raw.githubusercontent.com

FindInProject

Sublime Text 3 项目的文本搜索插件。

这是一个替代 Sublime Text 默认的“在文件中查找”命令的插件。它包括一个交互式结果视图和一个在后台可配置的搜索线程。

结果使用 TF-IDF 和 Page-Rank 算法的基本实现进行排序。

example.gif

安装

该插件已在 Windows 和 Linux 上进行测试,但应在 macOS 上也能正常工作。要从 https://packagecontrol.sublime.net.cn/ 安装它,请按以下步骤操作

  1. 打开命令面板,找到“Package Control: Install Package”
  2. 搜索 FindInProject 并安装。

要从 GitHub 安装,请按以下步骤操作

  1. 通过选择菜单找到 Sublime Text 包件文件夹
Preferences -> Browse Packages...
  1. 将 git 仓库克隆或下载到包件文件夹下名为“FindInProject”的新文件夹中

配置

所有配置都可通过菜单进行

Preferences -> Package Settings -> FindInProject

这包括

  • 默认设置,可以将它们复制到用户设置中进行修改
  • 默认快捷键映射,可以在用户快捷键映射中覆盖
  • 默认颜色方案,可以将其复制到用户颜色方案进行修改

设置包括以下选项

  • 要尝试的编码
  • 结果视图中的最大行长度
  • 要忽略的目录和文件扩展名
  • 要忽略的文件大小
  • 过多匹配次数(用于取消大的搜索)
  • 术语分隔正则表达式模式(默认为非单词字符,如空格和标点符号)
  • 页面引用正则表达式模式(默认为单词字符周围的两个方括号,例如 [[样本页面]]
  • 等等(设置文件中包含描述性注释)

使用方法

在常规上下文中(使用默认快捷键映射)以下快捷键可用。

快捷键 命令 描述
ctrl+shift+f 在项目中查找 打开"在项目中查找"输入面板

在结果视图(使用默认键映射)时,以下快捷键可用。

快捷键 / 操作 命令 描述
上箭头 / 下箭头 find_in_project_next_line 在结果中前后浏览
Pageup / Pagedown find_in_project_next_file 在文件间前后浏览
左箭头 / 右箭头 find_in_project_fold 在所选文件中折叠/展开结果
Enter / 双击 find_in_project_open_result 打开当前选中的结果

有关详细信息,请参阅菜单中可用的键映射文件

Preferences->Package Settings->FindInProject* menu.

搜索和结果排序

包含多个搜索和排序算法。每个算法都可以配置不同的权重等。

从页面和搜索查询中提取术语作为小写实体。这包括将驼峰词拆分成单独的术语。

算法:* TF-IDF 搜索 * 页面名称搜索 * 页面排名排序 * 页面年龄排序

TF-IDF 搜索

TF-IDF 算法在文档索引过程中扫描所有文件,并从每个文件中提取一组术语。这些术语被添加到整体字典和当前文档的字典中,并计算每个术语的使用次数。这些计数被归一化到文档中的总术语数,并插入到IDF映射中。

使用搜索查询术语计算每份文档的得分

doc_score = SUM (search_term.normal + document_term.normal) / len(overall_terms)
                FOR search_term in search_terms
                IF search_term in document_terms
                WHERE document_term = document_terms[search_term]

将每份文档术语的得分与阈值常数进行比较,以确定该文档是否应包含在结果中。得分通过加权平均与其他搜索得分合并。

相关设置 find_in_project_tfidf:* enabled - 是否启用此算法 * verbose - 是否在此算法日志中记录调试或信息级别 * weight - 在计算加权平均时使用的文档术语得分权重 * threshold - 包括在结果中的搜索术语得分阈值

页面名称搜索

每个文档的页面名称被拆分成术语并包含在搜索中。

相关设置 find_in_project_pagename:* enabled - 是否启用此算法 * verbose - 是否在此算法日志中记录调试或信息级别 * weight - 在计算加权平均时使用的得分权重 * threshold - 包括在结果中的得分阈值

页面排名排序

页面排名算法识别每个文件中的页面引用,每个页面名称是通过从文件名中删除路径和扩展名得到的。页面引用(默认)是由双方括号包围的页面名称。

每个文件在文档索引过程中作为部分被扫描并添加到页面节点图中,所有页面引用都被添加为图中的链接到其他页面节点。

一旦所有文件都已扫描,则页面排名算法按如下方式计算页面排名得分

DEF calculate_ranks:
    FOR page IN graph
        ranks[page] = (1 - damping) / len(graph) +
                        damping *
                            SUM ranks[in_page] / in_page.out_count
                                FOR in_page IN page.in_links

使用迭代方法重复此过程,其中每个迭代计算下一组排名,直到连续排名得分的增量之和小于某个指定的阈值(epsilon)

ranks = MAP page: 1 / len(graph) FOR page IN graph

WHILE delta > epsilon
    WHERE delta = SUM abs(ranks[page] - prev_ranks[page])
        FOR page IN graph

    prev_ranks = COPY(ranks)
    calculate_ranks()
}

将每个页面排名得分与其它搜索得分合并使用加权平均。

相关设置 find_in_project_pagerank:* enabled - 是否启用此算法 * verbose - 是否在此算法日志中记录调试或信息级别 * weight - 在计算加权平均时使用的得分权重 * damping - 在每个迭代中计算页面排名时使用的页面排名 damping * epsilon - 决定何时停止迭代的页面排名 epsilon

页面年龄排序

每个文档的最后修改日期用于排序结果搜索。

相关设置 find_in_project_age:* enabled - 是否启用此算法 * verbose - 是否以此算法记录调试或信息级别 * weight - 在计算加权平均时使用的分数权重

鼠标事件

Sublime Text当前实现仅允许简单的鼠标事件映射,但这些映射不支持选择器上下文。因此,任何映射可能与定义的其他映射冲突。

双击鼠标事件的默认处理方式是选择并查找双击的单词。已添加命令 find_in_project_mouse_event 以提供对选择器上下文的支持。这允许对双击鼠标事件进行自定义映射,以根据选择器上下文支持两种操作,例如

文件 ${USER}/AppData/Roaming/Sublime Text 3/Packages/User/Default.sublime-mousemap

[{
        "button": "button1", "count": 2,
        "command": "find_in_project_mouse_event",
        "args": { "commands": [
            {
                "command": "find_in_project_open_result",
                "run_for_selector": "text.findinproject"
            },
            {
                "command": "find_under_expand",
            }
        ]}
    }]

版本

  • 0.1.0: 初始版本
    • 在项目中搜索所有文件并单独在缓冲区中显示结果。
  • 0.2.0: 提升搜索
    • TF-IDF和页面级别算法的基本实现。
  • 0.2.1: 用户体验调优
    • 在结果缓冲区中显示查询。
    • 双击打开结果。
  • 0.3.0: 扩展搜索算法
    • 重构搜索机制以更好地支持多种算法
    • 解决标准文件查找结果面板中双击问题的方法
    • 解决页面级别错误
    • 解决与单元测试导入问题
    • 添加页面名称搜索
    • 添加文件年龄排序