跳到主要内容

search_files

search_files 工具可以在你的项目中跨多个文件执行正则表达式搜索。它帮助 Kilo Code 在代码库中定位特定的代码模式、文本或其他内容,并提供上下文的搜索结果。

参数

该工具接受以下参数:

  • path(必填):要搜索的目录路径,相对于当前工作目录
  • regex(必填):要搜索的正则表达式模式(使用 Rust 正则表达式语法)
  • file_pattern(可选):用于过滤文件的 glob 模式(例如,'*.ts' 表示仅搜索 TypeScript 文件)

功能

该工具使用正则表达式在指定目录中跨文件搜索,显示每个匹配项及其上下文。它就像一个强大的“在文件中查找”功能,适用于整个项目结构。

使用场景

  • 当 Kilo Code 需要查找特定函数或变量的使用位置时
  • 当 Kilo Code 协助重构并需要了解使用模式时
  • 当 Kilo Code 需要定位特定代码模式的所有实例时
  • 当 Kilo Code 需要在多个文件中搜索文本并具有过滤功能时

主要特性

  • 使用高性能的 Ripgrep 在多个文件中进行搜索
  • 显示每个匹配项的上下文(前后各 1 行)
  • 使用 glob 模式按文件类型过滤(例如,仅 TypeScript 文件)
  • 提供行号以便参考
  • 使用强大的正则表达式模式进行精确搜索
  • 自动限制输出为 300 个结果并通知
  • 截断超过 500 个字符的行并标记为“[truncated...]”
  • 智能地将附近的匹配项合并为单个块以提高可读性

限制

  • 最适合文本文件(对图像等二进制文件无效)
  • 在非常大的代码库中性能可能会下降
  • 使用 Rust 正则表达式语法,可能与其他正则表达式实现略有不同
  • 无法在压缩文件或存档中搜索
  • 默认上下文大小固定(前后各 1 行)
  • 由于结果分组,当匹配项接近时可能会显示不同的上下文大小

工作原理

当调用 search_files 工具时,它会遵循以下流程:

  1. 参数验证:验证必需的 pathregex 参数
  2. 路径解析:将相对路径解析为绝对路径
  3. 搜索执行
    • 使用 Ripgrep (rg) 进行高性能文本搜索
    • 如果指定了文件模式,则应用过滤
    • 收集匹配项及其上下文
  4. 结果格式化
    • 格式化结果,包括文件路径、行号和上下文
    • 显示每个匹配项前后各 1 行的上下文
    • 结构化输出以便于阅读
    • 将结果限制为最多 300 个匹配项并通知
    • 截断超过 500 个字符的行
    • 将附近的匹配项合并为连续块

搜索结果格式

搜索结果包括:

  • 每个匹配文件的相对路径(前缀为 #)
  • 每个匹配项前后的上下文行(默认为 1 行)
  • 行号填充为 3 个空格,后跟 | 和行内容
  • 每个匹配组后跟分隔线(----)

示例输出格式:

# rel/path/to/app.ts
11 | // 一些处理逻辑
12 | // TODO: 实现错误处理
13 | return processedData;
----

# 显示 300 多个结果中的前 300 个。如有必要,请使用更具体的搜索。

当匹配项彼此接近时,它们会合并为单个块而不是显示为单独的结果:

# rel/path/to/auth.ts
13 | // 一些代码
14 | // TODO: 添加适当的验证
15 | function validateUser(credentials) {
16 | // TODO: 实现速率限制
17 | return checkDatabase(credentials);
----

使用示例

搜索所有 JavaScript 文件中的 TODO 注释:

<search_files>
<path>src</path>
<regex>TODO|FIXME</regex>
<file_pattern>*.js</file_pattern>
</search_files>

查找特定函数的所有使用位置:

<search_files>
<path>.</path>
<regex>function\s+calculateTotal</regex>
<file_pattern>*.{js,ts}</file_pattern>
</search_files>

在整个项目中搜索特定的导入模式:

<search_files>
<path>.</path>
<regex>import\s+.*\s+from\s+['"]@components/</regex>
</search_files>