search_and_replace
search_and_replace
工具在文件中查找并替换文本,支持字面字符串和正则表达式模式。它允许在多个位置进行针对性替换,可选择在特定行范围内操作。
参数
必需参数
path
: 要修改文件的相对路径(相对于工作区根目录)search
: 要查找的文本字符串或正则表达式模式replace
: 用于替换匹配项的文本
可选参数
start_line
: 搜索范围开始的基于1的行号end_line
: 搜索范围结束的基于1的行号(包含该行)use_regex
: 设置为"true"
将search
参数视为正则表达式模式(默认为false
)ignore_case
: 设置为"true"
执行不区分大小写的搜索(默认为false
)
功能
此工具读取指定文件并根据提供的参数执行查找替换操作。它可以作用于整个文件或限制在特定行范围内。更改会在差异视图中展示,供用户审核批准后再保存。
使用场景
- 重命名文件中的变量、函数或类时
- 一致更新特定文本字符串或值时
- 使用正则表达式应用模式化更改时
- 重构代码需要替换特定模式时
- 在文件的定义区域内进行针对性更改时
主要特性
- 灵活搜索: 支持字面文本和正则表达式模式
- 大小写控制: 可选择搜索时忽略大小写
- 范围替换: 可将替换限制在特定行范围内(
start_line
,end_line
) - 全局替换: 默认在整个文件(或指定范围)内执行替换
- 交互式批准: 在差异视图中展示建议更改供用户审核
- 用户编辑支持: 允许直接在差异视图中编辑建议内容
- 上下文跟踪: 记录文件编辑操作
- 错误处理: 检查缺失参数、文件访问问题和无效行号
限制
- 单文件操作: 一次只能操作一个文件。可先用
search_files
跨多个文件查找模式 - 审核开销: 强制性的差异视图批准增加了交互步骤
- 正则复杂度: 复杂的正则模式可能需要仔细构建和测试
工作原理
当调用search_and_replace
工具时,它遵循以下流程:
- 参数验证: 检查必需的
path
、search
、replace
参数,并验证可选参数如行号和布尔标志 - 文件读取: 读取
path
指定的目标文件内容 - 正则构建:
- 如果
use_regex
为false
,search
字符串会被转义视为字面文本 - 创建带有
g
(全局)标志和可选i
(忽略大小写)标志的RegExp
对象
- 如果
- 替换执行:
- 如果提供
start_line
或end_line
,文件内容会被拆分为行,隔离相关部分执行替换,然后重建文件内容 - 如果未指定行范围,替换在整个文件内容字符串上执行
- 如果提供
- 差异视图交互:
- 在差异视图中打开文件,显示原始内容与建议内容
- 用替换结果更新差异视图
- 用户批准: 通过
askApproval
展示更改。如果拒绝则回滚 - 保存更改: 如果批准,保存更改(包括用户在差异视图中的任何编辑)
- 文件上下文跟踪: 使用
cline.getFileContextTracker().trackFileContext
跟踪编辑 - 结果报告: 向AI模型报告成功(包括用户编辑)或失败
用法示例
简单文本替换整个文件:
<search_and_replace>
<path>src/config.js</path>
<search>API_KEY_OLD</search>
<replace>API_KEY_NEW</replace>
</search_and_replace>
不区分大小写的正则替换更新函数调用:
<search_and_replace>
<path>src/app.ts</path>
<search>processData\((.*?)\)</search>
<replace>handleData($1)</replace>
<use_regex>true</use_regex>
<ignore_case>true</ignore_case>
</search_and_replace>
仅在10到20行内替换文本:
<search_and_replace>
<path>README.md</path>
<search>Draft</search>
<replace>Final</replace>
<start_line>10</start_line>
<end_line>20</end_line>
</search_and_replace>