尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

在终端里找、读、改一个文件:OpenCode 文件工具 read/write/grep 完整用法

在终端里找、读、改一个文件:OpenCode 文件工具 read/write/grep 完整用法 在终端里找、读、改一个文件OpenCode 文件工具 read/write/grep 完整用法【免费下载链接】opencodeThe open source coding agent.项目地址: https://gitcode.com/GitHub_Trending/openc/opencode晚上十一点线上报了个错你分不清它出自哪个文件。打开终端 grep 一遍再开编辑器来回切了五次窗口改完也不确定有没有打错字。OpenCode 是一个开源 AI 编码代理内置的 read、write、grep 三个文件工具把查找、阅读、修改都收在终端里写入前弹确认给你看 diff写入后自动附上语法诊断。它替我省掉了什么老办法用它之后rg找位置再开编辑器看上下文两个窗口来回切grep 定位、read 读上下文输出都在同一个会话里改完手动跑类型检查或等编辑器标红write 落盘即触发 LSP 诊断结果跟写入输出一起回来覆盖文件前自己默背一遍这个路径是不是已存在write 的确认框带完整 diff改哪个文件、改了什么一眼可见搜索结果散落在终端滚动历史里grep 按文件分组行号加匹配内容可直接拿去当 read 的 offset先说结论它替代的不是编辑器是来回切换和人工校验这两件事。五秒上手装完跑一条非交互命令npm i -g opencode-ailatest opencode run 找到 tool 目录下定义 MAX_LINE_LENGTH 的文件读出来并解释它的作用这条就能得到反馈代理内部先做正则搜索再读取命中的文件最后给你解释。它填的参数就三套看完你就有底了readfilePath绝对路径、offset起始行从 1 计、limit行数默认 2000writefilePath加content完整新内容greppattern正则、path搜索目录默认当前目录、include文件过滤如*.ts日常的文件操作基本就是这三套参数的组合。 逐项拆解核心能力read怎么防止一个大文件撑爆上下文一句话读文件或目录输出每行带行号默认截断。示例任务把 read.ts 从第 130 行开始读 40 行。截断逻辑很直白一行长文本不会把输出冲掉const line text.length MAX_LINE_LENGTH ? text.substring(0, MAX_LINE_LENGTH) MAX_LINE_SUFFIX : text ... output file.raw.map((line, i) ${i file.offset}: ${line}).join(\n)MAX_LINE_LENGTH 取 2000整体输出还有 50KB 的总上限触顶时它不甩一句已截断而是告诉你下一段该从哪个 offset 继续。二进制文件靠扩展名清单加不可打印字符比例判断图片和 PDF 则作为附件直接返回。路径写错也不是一句 404它会列出最接近的三个候选名。write写入前的确认怎么防手滑一句话写入完整内容自动格式化自动取 LSP 诊断。示例任务把 MAX_LINE_LENGTH 从 2000 改成 4000写回去。最有用的是写之前的确认不是简单 y/ndiff 直接摆在框里yield* ctx.ask({ permission: edit, patterns: [path.relative(instance.worktree, filepath)], metadata: { filepath, diff }, })你看得见改的是哪个文件、具体改了什么。配套说明文件还写死了一条覆盖已有文件前必须先读过它。落盘之后它会主动抓诊断output \n\nLSP errors detected in this file, please fix:\n${block}如果改动连带弄坏了别处的引用也会追加 LSP errors detected in other files。检查不等你回编辑器保存当场给结论。grep怎么在大仓里定位代码一句话按正则搜文件内容基于 ripgrep单次最多 100 条结果。示例任务找出 ctx.ask 的所有调用点。结果不是原始 rg 输出而是按文件重组过的const result yield* ripgrep.grep({ cwd, pattern, include, limit: 100 }) ... output.push(${match.path}:) output.push( Line ${match.line}: ${match.text})文件路径、行号、匹配内容三要素齐全看到的行号可以直接丢给 read 当 offset。命中满 100 条时结尾会标 Results truncated提示你收窄 path 或 pattern。一个完整任务走一遍任务是修一个截断常量日志里看到长行被切得不够需要调大。你只说一句找到 MAX_LINE_LENGTH 的定义改成 4000。接下来发生的事grep 命中 packages/opencode/src/tool/read.ts 第 14 行代理读了一下第 130 行附近确认周围是截断逻辑而不是别的常量write 前弹出确认diff 显示只有一行变化2000 到 4000写完 LSP 诊断干净没有追加输出。全程没碰编辑器你唯一做过的决定是按下那个 y。⚠️ 这些坑提前说三条值得提前知道权限确认不是走形式的 y。write 的确认框带 diff选始终允许后同类操作就不再询问了——新项目第一次先选仅本次看清楚它到底要动什么再决定要不要加白名单。截断不等于出错。单行超 2000 字符会带截断标记输出总量触到 50KB 上限时会给出可继续的 offset照抄即可offset 超出文件总行数时直接报 Offset N is out of range for this file (X lines)不用猜。grep 的无结果和结果太多长得不一样没命中输出 No files found范围太宽则在 100 条处截断并提示收窄。真要统计命中次数去 shell 里直接跑 rg工具说明里自己也写了这条。三个工具一条主线grep 定位、read 给上下文、write 落盘诊断跟在修改后面自动回。源码在 packages/opencode/src/tool/每个工具一个 .ts 加一份 .txt 说明安装方式与代理配置见 README.md。权限行为不符合预期时直接提 issue想动手改的话先读 AGENTS.md。【免费下载链接】opencodeThe open source coding agent.项目地址: https://gitcode.com/GitHub_Trending/openc/opencode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表