Cursor 配置同步覆盖另一台机器的本地配置 —— 完整排查指南

Cursor 并没有原生 Settings Sync。当 Gist 同步插件、dotfiles 软链接或云盘文件夹把过时配置推到第二台机器,你的规则、快捷键或 MCP server 就会被覆盖。先判断是哪一层同步干的,再把好版本救回来。

你花一小时在笔记本上把 Cursor 调得很顺手:.cursor/rules 精修过、加了两个 MCP server、Cmd+L 重新绑定。第二天打开台式机,你昨晚加的规则没了。或者更糟:晚上再回到笔记本,台式机昨天那份旧配置反过来把你刚做的全覆盖了。

首先要知道一件事(截至 2026 年 6 月):Cursor 没有原生的 “Settings Sync” 功能。和 VS Code 不一样,Cursor 里既没有 Settings Sync: Turn On 命令,也没有按类别同步的 UI。所以如果你的配置真的在两台机器之间流动,那一定是别的层在干这件事:第三方 Gist 同步插件、dotfiles 软链接、被云盘同步的文件夹(iCloud/Dropbox/OneDrive)、“Import from VS Code” 按钮,或者 Profiles 的导出/导入。这些机制全是后写覆盖,“赢家”是最近一次写入的那台机器,而不是带着你想要修改的那台。

最快的修复路径:现在立刻停掉每一层同步,挑出带着你想要配置的那台机器,先对它的 Cursor 配置目录做一份文件级备份,然后再把这份状态往外推。下面按从轻到重排。

第一步:到底是哪一层同步在搬你的配置?

Cursor 自己不同步。动手之前先认清机制,否则你会跟错误的对象较劲。

同步层判断特征在哪里
Gist 同步插件(如 “Sync Everything”、“cursor-settings-sync”)装了一个带 GitHub token 的插件;命令面板里有 “upload/download settings” 命令插件的状态栏图标,或 Cmd+Shift+P 输入 “sync”
dotfiles + 软链接(stow/ln -ssettings.json 是软链接,不是真实文件ls -l "~/Library/Application Support/Cursor/User/settings.json" 显示箭头 ->
被云盘同步的文件夹整个 Cursor 配置目录在 iCloud Drive / Dropbox / OneDrive 里把配置目录路径和你的云盘挂载点对一下
”Import from VS Code”你最近点过它,VS Code 的配置盖到了 Cursor 上Cursor Settings -> General -> Account -> “VS Code Import”
Profiles 导出/导入你在一台导出 .code-profile / Gist 又在另一台导入Cmd+Shift+P -> Preferences: Open Profiles (UI)
根本不是同步(git 状态)只有 .cursor/rules 或工作区 mcp.json 不一样项目里 git status 显示有未提交修改

如果以上都对不上,那就是你两台机器各有一份独立配置、根本没人同步。这正是最常见的”惊讶点”:大家以为 Cursor 会像 VS Code 那样自动同步,其实并不会,那份”丢失”的配置从来没被上传到任何地方。

Cursor 把你关心的文件放在哪

恢复过程中你会反复用到这些路径。(截至 2026 年 6 月。)

内容macOSWindowsLinux
用户配置目录~/Library/Application Support/Cursor/User/%APPDATA%\Cursor\User\~/.config/Cursor/User/
settings.json.../User/settings.json%APPDATA%\Cursor\User\settings.json~/.config/Cursor/User/settings.json
keybindings.json.../User/keybindings.json%APPDATA%\Cursor\User\keybindings.json~/.config/Cursor/User/keybindings.json
代码片段 snippets.../User/snippets/%APPDATA%\Cursor\User\snippets\~/.config/Cursor/User/snippets/
全局 MCP server~/.cursor/mcp.json%USERPROFILE%\.cursor\mcp.json~/.cursor/mcp.json
项目级 MCP<project>/.cursor/mcp.json<project>\.cursor\mcp.json<project>/.cursor/mcp.json
项目规则<project>/.cursor/rules/<project>\.cursor\rules\<project>/.cursor/rules/

注意:Cursor 里很多通过 UI 开关切换的设置并不settings.json 里,而是存在一个 SQLite blob:.../User/globalStorage/state.vscdb。这个数据库正是云盘同步最常搞坏的东西——两台机器写同一个 state.vscdb,要么后写覆盖,要么文件写到一半变成损坏文件。

常见原因

按”第二台机器覆盖了我的配置”这一情形的发生频率排序。

1. Gist 同步插件推了过时状态(后写覆盖)

这类插件不是合并引擎。机器 B 一打开,插件自动下载了旧 Gist(或者把 B 的过时状态自动上传、盖掉了你那份好 Gist),笔记本上的修改就丢了。

如何判断:打开插件的输出/日志频道,或它的命令(Cmd+Shift+P 输入 “sync”)。最后一次上传的时间戳和来源机器一目了然。如果 Gist 最后一次提交来自不该来的那台机器,那就是覆盖点。

2. 云盘同步把 state.vscdb 搞坏或覆盖了

如果你的 Cursor 配置目录在 iCloud Drive、Dropbox 或 OneDrive 里,两台机器会争抢同一个 state.vscdb。这是最糟的情况,因为它是二进制文件,同步到一半不只是被覆盖,还可能直接损坏。

如何判断:配置目录路径里包含某个云盘挂载点,或云盘客户端生成了冲突副本,比如 state (machine-B's conflicted copy).vscdb

3. dotfiles 的扩展列表对账卸掉了扩展

dotfiles 套路会把 cursor --list-extensions 的输出存进一个文件,然后在另一台机器上装上列表里有的、卸掉列表里没有的。如果列表是过时的,它会悄悄把你新装的扩展删掉。

如何判断:你的同步脚本会对比一个被追踪的 extensions.txt 并执行 cursor --uninstall-extension。同步跑完后,你手动装的扩展消失了。

4. .cursor/rules 是工作区级的,本来就不该被同步

.cursor/rules 在工作区目录里,不在用户配置目录。你把仓库克隆到两台机器、其中一台改了规则但没提交,另一台就永远看不到。看上去像同步失败,其实是 git 状态问题。

如何判断:机器 A 上项目里 git status 显示 .cursor/rules 有未提交修改;机器 B 是上一次提交的版本。

5. MCP server 配置过去了,但二进制没跟着

~/.cursor/mcp.json(或工作区 .cursor/mcp.json)被同步/复制时,真正的 mcp-server-foo 可执行文件并不会跟着走。机器 B 收到一个指向不存在二进制的配置。

如何判断:机器 B 看得到 MCP 条目,但启动失败、报 command not found(或者在 Cursor Settings -> MCP 里一直是黄/红状态)。可参考 Cursor MCP server 连不上

6. “Import from VS Code” 覆盖了 Cursor 配置

Cursor Settings -> General -> Account -> “VS Code Import” 会把 VS Code 的 Extensions、Themes、Settings、Keybindings 盖到 Cursor 上。如果你已经定制过 Cursor 再去点它,就可能把 Cursor 专属的调整覆盖掉。

如何判断:你的快捷键/主题突然变回了以前 VS Code 的样子;你记得自己最近点过 Import。

7. 两台机器 Cursor 版本不同,对同一字段解读不同

新版本里新增的字段,旧版本可能完全不认;旧版本写回配置时还可能把它去掉。

如何判断:两台机器都显示有这个字段,但在其中一台没有任何效果。Cursor -> About(或 cursor --version)里版本号不同。

开始之前

  • 在决定保留哪一份之前,两台机器都不要再继续改配置。
  • 在每台机器上记下你”上一次想保留的修改”的时间点。
  • 弄清楚丢失的数据在用户配置目录、SQLite state.vscdb、工作区 .cursor/、还是别的地方。
  • 动任何东西之前,先把你信任的那台机器的整个 Cursor 配置目录(路径见上表)手动备份一份。

需要收集的信息

  • 当前是哪一层在同步(用上面的判断表)。
  • Gist 同步插件的话:它最后一次上传/下载的时间戳和来源机器。
  • 每一层各自动了哪些类别/文件。
  • 两台机器的 cursor --version
  • 出问题的文件副本:settings.jsonkeybindings.jsonsnippets/~/.cursor/mcp.json.cursor/rules/*
  • 每台机器的登录身份 / Gist 账号。一台用个人 Gist 账号、另一台用别的账号,会把状态切成两份独立存储。

分步修复

按从最便宜到最彻底排。

第 1 步:确定基准机器,冻结每一层同步

挑出带着你想要配置的那台机器。然后在每一台机器上,把正在搬配置的东西停掉:

  • Gist 同步插件:关掉它的自动上传/自动下载(或直接禁用插件),让它别再推。
  • 云盘文件夹:暂停云盘客户端,或者干脆把 Cursor 配置目录从被同步的位置挪出来(这是更好的长期修复,见第 5 步)。
  • dotfiles:在基准状态定下来之前别跑同步脚本。

基准状态恢复完之前,任何一层都不该往别的机器写配置。

第 2 步:把基准状态显式备份一份

在基准机器上,复制整个配置目录(这样能一并抓到 settings.jsonkeybindings.jsonsnippets/state.vscdb blob):

cp -R "$HOME/Library/Application Support/Cursor/User" "$HOME/Cursor-User.backup-$(date +%Y%m%d-%H%M%S)"
cp -R "$HOME/.cursor" "$HOME/.cursor.backup-$(date +%Y%m%d-%H%M%S)"

Windows PowerShell:

Copy-Item -Recurse "$env:APPDATA\Cursor\User" "$env:APPDATA\Cursor\User.backup"
Copy-Item -Recurse "$env:USERPROFILE\.cursor" "$env:USERPROFILE\.cursor.backup"

这是你的保险。万一后续同步又出事,从这里恢复。

第 3 步:让基准状态成为权威版本

怎么”推”取决于是哪一层:

  • Gist 同步插件:在基准机器上强制上传到 Gist(插件的 “upload settings” 命令)。这会用你那份好状态替换远端 Gist。确认 Gist 的新提交时间戳。

  • dotfiles:提交基准机器的文件(包含一份最新的 cursor --list-extensions 导出)并推送:

    cursor --list-extensions > extensions.txt
    git add settings.json keybindings.json snippets extensions.txt
    git commit -m "chore: pin canonical Cursor config"
    git push
  • 云盘文件夹:不用推;你会在第 5 步把这一层去掉。确保基准机器的文件完好即可。

第 4 步:把基准状态拉到其它机器,一次一台

在每台非基准机器上,关闭 Cursor

  • Gist 同步插件:跑它的 “download settings” 命令,用权威 Gist 覆盖本地。

  • dotfilesgit pull,重新建链接(stow --no-folding -t ~ * 或你的 ln -s),然后对账扩展:

    cursor --list-extensions > current.txt
    comm -13 <(sort current.txt) <(sort extensions.txt) | xargs -I\{\} cursor --install-extension \{\}
  • 手动:把 settings.jsonkeybindings.jsonsnippets/~/.cursor/mcp.json 从备份复制覆盖本地文件。

重新打开 Cursor,确认它和基准机器一致,然后再处理下一台。不要几台一起搞。

第 5 步:把配置从任何”争抢二进制”的同步层里挪出来

无声覆盖最大的元凶,就是两台机器写同一个二进制 state.vscdb(云盘文件夹),或者扩展列表互相赛跑。把边界修对:

  • 绝对不要把 Cursor 配置目录放在 iCloud/Dropbox/OneDrive 里。如果已经放了,挪出来,让 Cursor 从你的备份重新生成。
  • 优先用文本文件同步(把 settings.json + keybindings.json 放进 Gist),而不是整目录同步——文本文件能扛过半截同步,而且合并冲突看得见。
  • 把 Gist 同步插件设成手动上传/下载,而不是自动,这样两台机器永远不会赛跑。

第 6 步:工作区级配置改用 git 管理(而不是同步)

.cursor/rules、工作区 .cursor/mcp.json.vscode/settings.json.vscode/extensions.json 应该进项目仓库,而不是进任何配置同步层:

git add .cursor .vscode
git commit -m "chore: pin workspace config"
git push

之后第二台机器靠 git pull 拿到这些,这才是合理的边界。这一步也把它们彻底移出了被覆盖的范围。

如何确认修好了

  • 在机器 A 改一个无害的设置(如字体大小),跑你的推送步骤,在机器 B 拉取:B 跟上了,而且只有它跟。
  • 在机器 A 改 .cursor/rules:它应该只通过 git pull 出现在机器 B,绝不走配置同步层。
  • 两台机器上 cursor --list-extensions 返回相同的扩展集合。
  • Cursor Settings -> MCP 在每台机器上都显示 server 为绿色(不绿就看 Cursor MCP server 连不上)。
  • 配置目录里任何地方都没有冲突副本文件(如 state (...'s conflicted copy).vscdb)。

长期预防

  • 记住 Cursor 没有原生同步。只选一种同步机制,在每台机器上都用它。混用两种(既装 Gist 插件又用云盘文件夹)必然赛跑。
  • 让 Cursor 配置目录远离任何被云盘同步的文件夹。同步文本文件,别同步整目录或 state.vscdb
  • .cursor/rules.vscode/、项目级 .cursor/mcp.json 都进 git。
  • 几台机器的 Cursor 版本尽量对齐(至少同一个 minor),免得新设置被旧版本去掉。
  • cursor --list-extensions 的输出纳入 git,这样扩展漂移看得见、可复现。
  • 所有机器都用同一个 Gist 账号 / 登录身份。混用账号会把状态切成两份独立存储。

常见误区

  • 指望 Cursor 的 Cmd+Shift+P 里有 Settings Sync: Turn On 命令。没有。那是 VS Code 的功能,Cursor 没有做。
  • 把 Cursor 配置目录放进 iCloud/Dropbox/OneDrive,以为它会”自动同步”。它会在二进制 state.vscdb 上赛跑,甚至把文件搞坏。
  • 已经定制过 Cursor 之后才去跑 “Import from VS Code”。它会覆盖 Cursor 专属的设置和快捷键。
  • 任何自动同步开着的时候在两台机器上改配置。谁后写谁赢,另一台被默默吃掉。
  • 把 API key 放进会被同步的 settings.json。它会出现在每台机器上和 Gist/云盘存储里。用环境变量或本机独立的 secret 文件。
  • 以为 .cursor/rules 会被同步只因为别的配置会。它是工作区级的,只通过 git 移动。
  • 恢复备份时只复制 settings.json,忘了 keybindings.jsonsnippets/~/.cursor/mcp.jsonstate.vscdb blob。

常见问题

Q:Cursor 里 Settings Sync: Turn On 命令在哪?

没有这个命令。截至 2026 年 6 月,Cursor 没有内置 Settings Sync。如果你的配置在机器之间流动,那是第三方插件、dotfiles、云盘文件夹或某次导入干的。用本文开头的表来判断是哪一种。

Q:我的同步写着”已合并”,但机器 B 的快捷键就是错的。

Cursor 的任何同步层都不会对 keybindings.json 做真正的合并,都是后写覆盖。确认基准机器,把它的 keybindings.json 推上去(第 3、4 步)。

Q:MCP 条目过去了,但 server 启动报 “command not found”。

机器 B 上没装对应二进制。~/.cursor/mcp.json 里的配置过去了,可执行文件没过去。在新机器上跑你的 MCP 安装步骤。参考 Cursor MCP server 连不上

Q:能不能回滚到被覆盖之前的配置?

没有同步历史 UI。第 2 步生成的 Cursor-User.backup-*.cursor.backup-* 目录就是你的回滚点。关掉 Cursor,恢复目录,再打开。

Q:把 Cursor 文件夹放进 iCloud/Dropbox 是不是个好的同步办法?

不是。整个配置目录是最不该云盘同步的东西,因为 state.vscdb 是二进制文件,两台机器会互相覆盖或把它搞坏。改成把 settings.jsonkeybindings.json 当文本同步,或者用设为手动的 Gist 插件。

Q:这些办法能跨个人账号和工作账号用吗?

只有当两台机器指向同一个 Gist/账号才行。个人 GitHub 账号上的 Gist 和工作账号上的 Gist 是两份独立存储,配置不会互相流动。

相关阅读

标签: #Cursor #排查 #IDE 同步 #AI 编程