Cursor IDE 状态与磁盘不同步

AI 改完后编辑器还显示旧代码、保存提示「file modified externally」、或 AI 改动秒回滚——文件 watcher 和 AI 写入的竞态,以及怎样在不丢代码的前提下修好。

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/BlackFormat-on-Save 冲突原因 9
仅 Windows:每次重启行尾都变回 LFCRLF 缓存损坏原因 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 的改动盖掉。注意:formatOnSavefiles.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.autoSaveeditor.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 全救回。

相关阅读

标签: #排查 #Cursor #排查 #IDE 同步