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
工具时,它会遵循以下流程:
- 参数验证:验证必需的
path
和regex
参数 - 路径解析:将相对路径解析为绝对路径
- 搜索执行:
- 使用 Ripgrep (rg) 进行高性能文本搜索
- 如果指定了文件模式,则应用过滤
- 收集匹配项及其上下文
- 结果格式化:
- 格式化结果,包括文件路径、行号和上下文
- 显示每个匹配项前后各 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>