Cursor 的 AI 直接写磁盘,编辑器的 file watcher 本该立刻感知并刷新视图。一旦 watcher 漏掉事件,编辑器和磁盘就会短暂”看到不同的世界”:你看到的还是旧代码、AI 回复里却已经在引用新代码;保存时弹 File modified externally;一个 split pane 是新的、另一个是旧的;或者 AI 改动闪一下就回滚。
最快的修法(先做这个):如果当前 tab 没有未保存的圆点,直接打开命令面板(Cmd/Ctrl+Shift+P)-> Developer: Reload Window,Cursor 会从磁盘重新加载所有文件并重建 watcher。如果 tab 有圆点,千万别按 Cmd/Ctrl+S——那会用你的旧 buffer 把 AI 的写盖回去。先备份 buffer(见下面 Step 1)再 reload。
截至 2026 年 6 月(Cursor 2.5),Anysphere 已确认三种新原因,它们看起来和 watcher 漏事件一模一样、其实不是:Agent Review Tab 冲突、cloud-sync 竞态、Format-on-Save 冲突。先过一遍下面的判断表,确保你修的是对的那个。
先判断你属于哪一类
| 症状 | 最可能的原因 | 跳到 |
|---|---|---|
终端 cat file.ts 是新内容,编辑器是旧的 | watcher 漏事件 | 原因 1 |
保存弹 File modified externally 且 tab 有圆点 | 脏 buffer 撞 AI 写 | 原因 2 |
| 同一文件的两个 pane 内容不一致 | split pane 视图过期 | 原因 3 |
项目在 /mnt/c、Docker volume 或网络盘 | 跨文件系统事件延迟 | 原因 4 |
| 改动出现后一秒内消失 | auto-save 撞 apply | 原因 5 |
| AI 改动瞬间回滚,且只在开着 Review Tab 时 | Agent Review Tab 冲突 | 原因 7 |
| 文件保存几秒后回滚到旧版本 | cloud sync(OneDrive/iCloud/Dropbox) | 原因 8 |
| 改动回滚,且你用了 Prettier/ESLint/Black | Format-on-Save 冲突 | 原因 9 |
| 仅 Windows:每次重启行尾都变回 LF | CRLF 缓存损坏 | 原因 10 |
常见原因
1. File watcher 漏掉了 AI 的写事件
macOS FSEvents / Linux inotify / Windows ReadDirectoryChangesW 在高负载或网络挂载下会丢事件,Cursor 内部 watcher 也有节流。AI 改完磁盘是新的、编辑器没收到通知就不刷新。
如何判断:终端 cat file.ts 看到新内容、编辑器里还是旧的——就是 watcher 没听到。
2. 编辑器 buffer 有未保存改动 + 磁盘被 AI 写
文件 tab 上有圆点(脏 buffer),同时 AI 改了磁盘。Cmd/Ctrl+S 把 buffer 写回去 = 覆盖 AI 改动。Cursor 通常会弹 File modified externally 冲突提示,但手快的一次保存可能让 buffer 静默赢。
如何判断:apply 前 / 后盯 tab 圆点;apply 时 tab 有圆点就是危险信号。
3. 同文件被 split pane 打开两份
VS Code/Cursor 允许一个文件在两个 pane 显示,但每个 pane 有独立 view model。AI 写完后聚焦的 pane 刷新了、另一个没刷。
如何判断:两个 pane 显示同一文件、但内容不一致。
4. WSL / Docker volume / 网络盘文件事件延迟
/mnt/c/...(WSL2 文件系统边界)、macOS 上的 Docker Desktop bind mount、SMB/NFS 网络盘、Dropbox/iCloud 同步目录——文件事件可能延迟 5-30 秒、甚至完全丢。WSL2 上 inotify 事件穿过 \\wsl$ 边界本来就不可靠。
如何判断:项目路径在以上之一;同样的 AI 操作在原生路径不复现。
5. Auto-save 撞上 apply
files.autoSave: afterDelay 下,Cursor 在 files.autoSaveDelay(默认 1000 ms)后写脏 buffer。Apply 正好落在这个窗口里,旧 buffer 就把新内容覆写了。
如何判断:files.autoSave 不是 off;问题发生时间和 delay 窗口吻合。
6. AV / 文件锁短暂占用
Windows Defender、企业 AV、Spotlight 索引、Time Machine 备份扫描偶尔短暂锁文件 200-500 ms,刚好落在 watcher 节流窗口里。
如何判断:问题间歇性、和扫描时段相关。
7. Agent Review Tab 冲突(新,2026 年初确认)
当同一文件同时在 Agent Review Tab 和普通编辑器 tab 里打开时,通过 “Fix in Chat” 发出的改动会被瞬间回滚——Review Tab 的 view model 赢了。Anysphere 在 2026 年初的 Cursor 论坛上确认了这个 bug。
如何判断:改动出现后约 1 秒内消失;在发 prompt 前关掉 Agent Review Tab 后就不再发生。
8. Cloud sync 把文件覆写回去(新,2026 年初确认)
OneDrive、iCloud Drive、Dropbox、Google Drive 可能在 Cursor 写完之前就把一份旧缓存推回磁盘,于是 AI 保存几秒后文件就回滚。Cursor 团队在 2026 年初确认了这一点。
如何判断:项目在同步目录里(OneDrive\...、~/Library/Mobile Documents/...、Dropbox/...);回滚发生在保存后一拍、而不是 apply 当时。
9. Format-on-Save 冲突(新,2026 年初确认)
开了 editor.formatOnSave 又装了 Prettier、ESLint 或 Black 时,格式化器会在 AI 写完后立刻重写文件,可能把 AI 的改动盖掉。注意:formatOnSave 在 files.autoSave: afterDelay 下不会触发,这本身也是”保存了却没格式化”困惑的来源。
如何判断:关掉 Format on Save(或用 cursor --disable-extensions 启动)后回滚停止。
10. Windows 重启时 CRLF 缓存损坏(新)
仅 Windows 10/11:Cursor 在行尾转换完成前,把 AI 改过的内容(LF 版本)缓存进了 state.vscdb。下次重启时它会用这份 LF 快照覆盖你磁盘上的 CRLF 文件——静默发生,哪怕文件当时是关着的。files.eol 和 .editorconfig 都拦不住。
如何判断:反复转换后,每次重启行尾又变回 LF。
动手前先确认
- 确认问题是只在某些文件 / 某些时段 / 某些项目出现,还是普遍现象。
- 复现前先 commit 一次,确保 revert 出问题有 baseline 可救。
- 记下 Cursor 版本(
Cursor -> About)、操作系统、文件系统类型(APFS、WSL ext4、Docker volume、SMB)。
需要收集的信息
- Cursor 版本、操作系统、文件系统类型。
- 项目路径——是否在 WSL
/mnt/、Docker volume、网络盘,或同步目录(OneDrive/iCloud/Dropbox)。 files.autoSave和editor.formatOnSave设置;文件是否多 pane 打开、是否在 Agent Review Tab 里打开。View -> Output -> Log (Window)看是否有missed event/throttled类日志。
最短修复路径
顺序是:先救当前文件,再防止再犯。
Step 1:先备份 buffer 再 reload
如果当前文件 tab 有圆点(脏 buffer),先把 buffer 备份出来:
# macOS:在编辑器里全选 -> Cmd+C -> 再到终端:
pbpaste > /tmp/scratch-backup.ts
然后 Cmd/Ctrl+Shift+P -> File: Revert File,编辑器丢掉未保存 buffer、重读磁盘。再把 scratch 副本和磁盘内容 diff 一下,把还需要的部分合并回来。
Step 2:全局不一致就 reload window
Cmd/Ctrl+Shift+P -> Developer: Reload Window,整个 Cursor 重新加载所有文件、watcher 重建,比退出 Cursor 快。如果单个文件还是旧的,点 Explorer 面板顶部的 Refresh Explorer 按钮。
Step 3:AI session 期间关掉 auto-save
Settings -> 搜 files.autoSave -> 设为 off(或 onFocusChange)。AI 改完后手动保存,避免 buffer 抢写。
// settings.json
{
"files.autoSave": "off",
"files.hotExit": "onExit"
}
Step 4:同文件不要 split pane,并关掉 Review Tab
关掉重复的 pane(Cmd/Ctrl+Shift+P -> View: Close Other Editor Group)。如果你用 Agent Review,发 “Fix in Chat” 前先关掉 Agent Review Tab——同一文件上开着它正是瞬间回滚的确认原因(原因 7)。
Step 5:把项目搬到原生文件系统
WSL2 下 /mnt/c/Users/you/repo 跨文件系统边界、watcher 极慢。git clone 到 ~/repo(WSL 原生 ext4),速度和事件可靠性都跳一个量级。如果必须留在 /mnt/c,在 WSL 设置里开 polling:
// settings.json(WSL 窗口)
{
"remote.WSL.fileWatcher.pollingInterval": 1000,
"files.watcherExclude": { "**/node_modules/**": true }
}
macOS 上的 Docker Desktop:最好整个项目放容器内,或把 bind mount 标成 cached / delegated。
Step 6:把项目移出云同步目录
如果仓库在 OneDrive、iCloud Drive、Dropbox 或 Google Drive 里,把它移出来(比如放到 ~/code/repo)或把该目录排除出同步。云客户端推回旧快照是确认的回滚原因(原因 8)。版本管理交给 git。
Step 7:关掉 Format on Save(或隔离扩展)
Settings -> 搜 editor.formatOnSave -> 关掉,或临时禁用 Prettier / ESLint / Black。要确认是不是某个扩展捣乱,用这个命令重启:
cursor --disable-extensions
如果回滚停了,再逐个开回扩展、找出元凶。
Step 8:AV / Spotlight 加白名单
Windows Defender / 企业 AV -> 排除列表加上项目根 + Cursor 安装目录。macOS Spotlight:
sudo mdutil -i off ~/path/to/repo
或 System Settings -> Spotlight -> Search Privacy 加入该目录。
Step 9(仅 Windows):打破 CRLF 缓存循环
如果行尾每次重启都变回 LF,打开受影响的文件、点 Keep All 确认 AI 改动。这会清掉 state.vscdb 里那份过期快照、中断损坏循环。
怎么确认已经修好
- 重启 Cursor 后再触发一次原操作,确认不是会话内的临时状态。
- 关掉 auto-save,对单个文件跑一次新的 AI Apply;编辑器视图和磁盘上
cat出来的内容应当逐字节一致。 - 切换到另一个仓库 / 另一台机器复现,区分是 Cursor 配置问题还是项目本身问题。
- 让同事打开同一个仓库重试,确认不是只有你本地缓存被修好。
如果还是没修好
- 把复现路径缩到最小:单文件、单次 AI Apply、auto-save 关、Review Tab 关。
- 回滚最近一次 Cursor 升级或
settings.json改动。 - 在 forum.cursor.com 搜 “file watcher missed” / “out of sync”,附上 OS + 文件系统类型。
- 抓
View -> Output -> Log (Window)贴到 Cursor 的 Bug Reports 分类。
常见问题
AI 明明改了文件,Cursor 为什么一直显示旧代码?
file watcher 漏了写事件(原因 1)。运行 Developer: Reload Window 强制从磁盘重读。如果反复出现,多半是项目在慢文件系统上(WSL /mnt/c、Docker volume、网络盘)。
我的 AI 改动出现后一秒就回滚,怎么回事? 那是回滚、不是同步延迟。截至 2026 年确认的两大元凶是:同一文件上开着 Agent Review Tab(发 prompt 前关掉它)、以及云同步客户端把文件覆写回去(把仓库移出 OneDrive/iCloud/Dropbox)。Format on Save 配 Prettier/ESLint 也会这样。
看到「File modified externally」时按 Cmd+S 安全吗?
不安全。保存会把编辑器里的 buffer 写到更新的磁盘内容上面。先备份 buffer(pbpaste > /tmp/backup)、运行 File: Revert File,再把还需要的部分合并回去。
关掉 auto-save 真的有用吗?
AI session 期间有用。files.autoSave: afterDelay 默认 1000 ms 后写 buffer,Apply 落在那个窗口里旧 buffer 就赢了。设成 off、每次 Apply 后手动保存。
Windows 上文件行尾老是变回 LF,怎么停?
这是已知缓存 bug:Cursor 把转换前的 LF 副本存进 state.vscdb、重启时还原。files.eol 和 .editorconfig 都修不了;打开文件、点 Keep All 清掉缓存快照。
怎样只重载单个文件而不重载整个窗口?
Cmd/Ctrl+Shift+P -> File: Revert File(会丢掉未保存 buffer、重读磁盘)。如果文件不脏,点 Explorer 面板里的 Refresh Explorer 按钮。
预防建议
- AI 编辑期间 auto-save 关掉,结束后再开。
- 同文件不开 split pane;发 “Fix in Chat” 前先关 Agent Review Tab。要对比就用
git diff或 Source Control 视图。 - 项目放原生文件系统(APFS、WSL ext4、Linux 本地盘),别放云同步目录。
- 把 Cursor 安装路径和项目根加进 AV / Spotlight 白名单。
- 重要 AI session 前后各 commit 一次,最坏情况一行
git reset --hard全救回。