Edit 修改大文件时“成功”但未写入磁盘

你的运行环境(版本号「点击帮助-关于-复制」):

0.1.61

问题描述(你遇到了什么问题?):

Edit 修改大文件时“成功”但未写入磁盘

复现步骤(如何才能重现这个 Bug/问题?):
会话中先用脚本/命令(如 python)直接修改一个较大的 Vue 文件

  1. 再用 Edit 工具对该文件做修改
  2. Edit 报告成功,但 git diff / grep 显示磁盘未变

报错信息或截图(如有):

请在此处粘贴截图或日志代码

TRAE 编辑工具 Bug 反馈:Edit 修改大文件时“成功”但未写入磁盘

环境

  • 操作系统:macOS
  • 时间:2026-09-01 前后
  • 涉及文件:Vue 单文件组件(约 2200+ 行,含 <script setup>、模板和约 1300 行 <style>

现象 对同一个大文件(src/views/ChatView.vue,约 2250 行)使用 Edit 工具修改 CSS:

  1. Edit 工具返回成功,并在返回结果中展示了“修改后”的代码片段(带行号,看起来完全正常)
  2. 但随后用独立命令(grep / git diff)检查磁盘上的文件,内容完全没有变化,还是修改前的旧版本
  3. 该问题在同一文件的连续多次 Edit 中重复出现了 2 次,第一次因此提交了一个“假修复”到 git(工具显示已改,实际磁盘未变),直到用户反馈线上 bug 依旧才定位到

伴生症状(疑似同根因)

  • Read 工具读取同一文件时返回了旧版本的缓存内容:Read 显示文件共 2161 行,而 wc -l 实际磁盘文件为 2249 行,相差 88 行
  • Read 的行号与 grep 的行号对不上(同一匹配 Read 显示在 1424 行附近,grep 实际在 1405 行附近)

推测是文件内容缓存与磁盘不同步:Edit 基于陈旧的文件视图执行并“写入”,实际写到了过期状态上,未真正落盘。

复现路径(不确定能否稳定复现)

  1. 会话中先用脚本/命令(如 python)直接修改一个较大的 Vue 文件
  2. 再用 Edit 工具对该文件做修改
  3. Edit 报告成功,但 git diff / grep 显示磁盘未变

影响

  • 修改静默丢失,且工具返回“成功”,具有很强误导性
  • 若不主动用外部命令核验磁盘内容,会提交错误代码
  • 当前 workaround:对该文件改用 python 脚本写入磁盘;每次修改后用 grep 复核 + 检查构建产物 hash 是否变化来确认落盘

期望行为 Edit 写入后应保证磁盘内容与工具返回的“修改后”内容一致;或至少在检测到文件缓存与磁盘不一致(mtime/内容校验)时报错而不是静默“成功”。

当前帖子里的信息还不足以形成可靠结论。请你在本帖补充 TRAE IDE 版本、操作系统、复现步骤,以及可用的截图或日志。

macos

收到,感谢补充系统信息。当前帖子里的信息还不足以形成可靠结论,请你在本帖继续补充可用的截图或相关日志。

已知问题,正在修复中。

这个问题我遇到过类似的,根因很可能是文件内容缓存与磁盘不同步导致的。我来分析一下:

从你的描述来看,关键线索是:

  1. 先用 Python 脚本直接修改了文件(绕过了 TraeCode 的文件追踪)
  2. 再用 Edit 工具修改
  3. Edit 返回成功,但磁盘实际未变

根因推测

TraeCode 的 Edit 工具在内存中维护了一份文件内容的缓存(用于上下文管理和 diff 计算)。当你用外部脚本(Python)直接修改磁盘文件后,这个缓存并没有被更新。Edit 工具基于过期的缓存计算 diff 并"写入"——实际上它把缓存内容+你的修改写回了磁盘,但缓存内容缺少了 Python 脚本的修改,所以相当于把 Python 的修改给覆盖掉了。

你的 Read 工具返回 2161 行而实际文件 2249 行(差 88 行),这进一步证实了缓存过期的问题。

解决建议

  1. 修改前强制刷新:在外部脚本修改文件后,让 Agent 用 Read 工具重新读取文件,确保缓存与磁盘同步,然后再用 Edit。你可以试试在对话中说"请先重新读取这个文件,确认最新内容后再修改"。

  2. 用外部命令验证:这是你已经在做的 workaround,每次 Edit 后用 grepgit diff 验证,这个方法虽然繁琐但确实有效。

  3. 避免外部脚本 + Edit 混用:在同一轮对话中,要么全程用 Agent 的工具修改文件,要么全程用外部脚本。混用是触发这个 bug 的最常见场景。

  4. 大文件拆分:2200+ 行的 Vue 文件确实比较大了,如果可能的话拆成多个组件文件,不仅降低触发 bug 的概率,也更好维护。

这个问题本质上是文件同步机制的设计缺陷,需要官方在 Edit 工具中增加文件 mtime 校验——写入前检查磁盘文件是否被外部修改过,如果不一致就报错而不是静默覆盖。