AI 编辑直接写磁盘,编辑器的 file watcher 一般立刻感知并刷新视图。但大文件、远程文件系统(WSL/Docker volume)、AV 拦截、auto-save 撞上 apply 这几种场景里,编辑器和磁盘会短暂”看到不同的世界”。表现是你看到的还是旧代码、同事 / AI 回复里却已经在引用新代码;保存时弹”file has been modified externally”;或一个 split pane 是新的另一个是旧的。
修这类问题不是简单 Cmd+S 覆盖——盲目覆盖会用旧 buffer 把 AI 改的内容盖回去。
常见原因
1. File watcher 漏掉了 AI 的写事件
macOS FSEvents / Linux inotify / Windows ReadDirectoryChangesW 在高负载或网络挂载下会丢事件。Cursor 内部 watcher 也有节流。AI 改完磁盘是新的、编辑器没收到通知不刷新。
如何判断:终端 cat file.ts 看到新内容,编辑器里还是旧的——就是 watcher 没听到。
2. 编辑器 buffer 有未保存改动 + 磁盘被 AI 写
文件 tab 上有圆点(脏 buffer),同时 AI 改了磁盘。Cmd+S 把 buffer 写回去 = 覆盖 AI 改动。Cursor 通常会弹冲突提示,但有时静默赢家是 buffer。
如何判断:apply 前 / 后看 tab 圆点;apply 时 tab 有圆点就是危险信号。
3. 同文件被 split pane 打开两份
VS Code/Cursor 允许一个文件在两个 pane 显示,但每个 pane 有独立 view model。AI 写完后 pane A 刷新了、pane B 没刷(因为它最近没被聚焦)。
如何判断:两个 pane 显示同一文件、但内容不一致。
4. WSL / Docker volume / 网络盘文件事件延迟
/mnt/c/...(WSL 跨边界)、Docker macOS osxfs 卷、SMB/NFS 网络挂载、Dropbox/iCloud 同步目录——文件事件可能延迟 5-30 秒甚至完全丢。
如何判断:项目路径在以上之一;同样的 AI 操作在原生路径不复现。
5. Auto-save 撞上 apply
Cursor files.autoSave: afterDelay 在 1 秒后写脏 buffer。Composer apply 正好在那一瞬写完,编辑器没刷新就用旧 buffer 覆写。
如何判断:Settings → files.autoSave 不是 “off”;问题发生时间和 auto-save delay 接近。
6. AV / 文件锁短暂占用
Windows Defender、企业 AV、Spotlight 索引、Time Machine 备份扫描偶尔短暂锁文件 200-500ms,刚好 fall 在 watcher 节流窗口。
如何判断:问题间歇性、和 AV 扫描时段相关。
动手前先确认
- 确认问题是只在某些文件 / 某些时段 / 某些项目里出现,还是普遍现象。
- 复现前先 commit 一次,确保如果 revert 出错有 baseline 可救。
- 记下 Cursor 版本和文件系统类型(macOS APFS、WSL ext4、Docker volume、SMB)。
需要收集的信息
- Cursor 版本、操作系统、文件系统类型。
- 项目路径(是否在 WSL
/mnt/、Docker volume、网络盘、iCloud 同步目录)。 files.autoSave设置、是否多 pane 同文件打开。- View → Output → Log (Window) 看 watcher 是否有 “missed event” / “throttled” 类日志。
最短修复路径
按”先救当前文件 → 后改防再犯”。
Step 1:先存 buffer 再 reload
如果当前文件 tab 有圆点(脏 buffer),先 copy 全文到外部 scratch 文件:
# macOS:选中全部 → Cmd+C → 终端
pbpaste > /tmp/scratch-backup.ts
然后 Cmd+Shift+P → “Revert File”,编辑器丢 buffer、重读磁盘。再决定要不要把 scratch 内容合并回来。
Step 2:全局不一致就 reload window
Cmd+Shift+P → “Developer: Reload Window”,整个 Cursor 重新加载所有文件、watcher 重建。比退出 Cursor 快。
Step 3:关 auto-save,至少 AI session 期间
Settings → 搜 files.autoSave → 改成 off 或 onFocusChange。AI 改完后手动 Cmd+S,避免 buffer 抢写。
// settings.json
{
"files.autoSave": "off",
"files.hotExit": "onExit"
}
Step 4:同文件不要 split pane
把第二个 pane 关掉,或者用”split editor right”的 mirror 模式而不是独立 view。Cmd+Shift+P → “View: Close Other Editor Group”。
Step 5:项目从 /mnt/c 搬到 WSL 原生
WSL2 下 /mnt/c/Users/you/repo 跨文件系统边界,watcher 极慢。git clone 到 ~/repo 这种 WSL 原生路径,速度和事件可靠性都跳一个量级。
Docker macOS 同理,把 volume 改成 cached 或 delegated mount,最好整个项目放容器内。
Step 6:AV 加白名单
Windows Defender / 企业 AV → 排除目录列表加你的项目根 + Cursor 安装目录。macOS Spotlight:
sudo mdutil -i off ~/path/to/repo
或 System Settings → Spotlight → Privacy 加入。
怎么确认已经修好
- 重启 Cursor 后再触发一次原操作,确认不是会话内的临时状态。
- 切换到另一个仓库 / 另一台机器复现,区分是 Cursor 配置问题还是项目本身问题。
- 让同事打开同一个仓库重试,确认不是只有你的本地缓存被修好。
如果还是没修好
- 把复现路径缩到最小:单文件、单次 AI apply、auto-save 关。
- 回滚最近一次 Cursor 升级或 settings.json 改动。
- 在 forum.cursor.com 搜 “file watcher missed” / “out of sync”;附 OS + 文件系统类型。
- 抓 View → Output → Log (Window) 贴 Bug Reports。
预防建议
- AI 编辑期间 auto-save 关掉,结束后再开。
- 同文件不开 split pane;要对比就用 git diff / source control 视图。
- 项目永远放原生文件系统:macOS APFS、WSL ext4、Linux 本地盘。
- 把 Cursor 安装路径和项目根加进 AV / Spotlight 白名单。
- 重要 AI session 前后各 commit 一次,最坏情况一行
git reset --hard救回。