你在 user settings 里关掉了 format-on-save、把模型默认设成 sonnet。换到团队仓库后保存自动格式化又被打开、模型变成 gpt-5-codex、Tab 补全连提示都不弹了。原因是 Cursor 继承 VS Code 的多层设置体系:user → workspace → folder,越靠近文件的层级覆盖越上层。仓库里的 .vscode/settings.json 或 .cursor/ 配置会直接压住你个人的偏好。
要修,先搞清楚是哪一层覆盖了什么。
常见原因
1. 仓库 .vscode/settings.json 覆盖了 AI / 格式化设置
团队为了统一风格 commit 了 .vscode/settings.json,里面可能有:
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"cursor.cpp.disabledLanguages": ["markdown"],
"cursor.composer.shouldAllowCustomModes": false
}
最后两条直接关掉了 Cursor 自己的功能。
如何判断:Cmd+Shift+P → “Preferences: Open Workspace Settings (JSON)“,看是不是有 cursor.* 开头的键。
2. 仓库根的 .cursor/ 配置
Cursor 自家专属配置可能放在 .cursor/settings.json 或 .cursor/rules/。这层比 .vscode/ 更优先于 Cursor 功能。
如何判断:ls -la <repo-root>/.cursor/。
3. 多个 prettier / eslint 配置打架
仓库根有 .prettierrc,子目录有 .prettierrc.json,依赖里又装了带预设的 prettier-plugin-*。Cursor 选用的是离当前文件最近的那份。
如何判断:在一个出问题的文件里 Cmd+Shift+P → “Format Document With…”,看默认格式化器是谁。
4. Workspace 的扩展启用 / 禁用清单
仓库可以 commit .vscode/extensions.json,推荐安装哪些扩展。配套的”workspace 禁用扩展”会让某些扩展只在这个 workspace 里失效——Cursor 的 AI 扩展若被禁用,AI 全部失灵。
如何判断:扩展面板 → 看你的 Cursor 扩展是否在当前 workspace 显示 “Disabled (Workspace)“。
5. 多根 workspace(multi-root)的优先级混乱
.code-workspace 文件可以挂多个仓库,每个仓库可以有自己 settings;最终生效顺序复杂,常常和你预期相反。
如何判断:File → Open Recent,看打开的是 .code-workspace 还是单个文件夹。
6. EditorConfig 反向覆盖
.editorconfig 里写 indent_size = 2 会无视你 user settings 的 4,且不会有提示。
如何判断:仓库根 cat .editorconfig。
动手前先确认
- 确认问题是否只在这个 workspace 里出现——换开另一个仓库测同一行为,区分是个人设置还是 workspace 覆盖。
- 复现前先 commit 一次或开 branch,避免改
.vscode/settings.json把团队配置弄乱。 - 记下 Cursor 版本和当前模型;不同版本默认值不一样。
需要收集的信息
- Cursor 版本、操作系统。
- 仓库根的
.vscode/settings.json、.cursor/settings.json、.editorconfig、.prettierrc*全文。 - Cmd+Shift+P → “Developer: Show Active File Path” + “Preferences: Settings (JSON) → User” 截图。
- 一条最小复现:在哪个文件、做什么动作、期望/实际行为。
最短修复路径
按”先看清再决定改哪层”顺序。
Step 1:查清当前设置的来源
Cmd+Shift+P → “Preferences: Open Settings (UI)“,搜索可疑键名(如 editor.formatOnSave)。Cursor 会在每个设置旁边标”来自 Workspace / User / Default”。这一步直接定位是哪一层覆盖。
Step 2:读仓库的 .vscode/settings.json
cat .vscode/settings.json
cat .cursor/settings.json 2>/dev/null
cat .editorconfig 2>/dev/null
把所有覆盖列在一张表上:键名 → 仓库的值 → 你想要的值。
Step 3:决定改哪层
- 你能 commit 到仓库:直接改
.vscode/settings.json,让团队都受益。 - 不能改仓库(fork / 第三方 / 大公司 monorepo):在 user settings 里设
"settings.applicationScope": true是不够的,VS Code 没有”user overrides workspace”机制。改用 folder-level 覆盖(Cmd+Shift+P → “Preferences: Open Folder Settings”),放在<folder>/.vscode/settings.json但加入 .gitignore。
# .gitignore(个人补丁)
.vscode/settings.json.local
或用 [Settings Sync] 把不同 workspace 的差异同步起来。
Step 4:处理 AI 专属覆盖
仓库设了 "cursor.composer.shouldAllowCustomModes": false:
- 团队约定:保留仓库设置,理解为啥关。
- 个人用:在 Cursor → Settings → Features 里手动重新开(这层是 application-scope,不被 workspace 覆盖)。
Step 5:处理扩展被禁用
扩展面板 → 找到 Cursor 扩展 → 右键 → “Enable (Workspace)“。若没有这个选项,说明仓库根用 unwantedRecommendations 主动禁用,需要在 .vscode/extensions.json 里删那一条。
Step 6:清理多 prettier 冲突
# 找出所有 prettier 配置
find . -name ".prettierrc*" -not -path "./node_modules/*"
find . -name "prettier.config.*" -not -path "./node_modules/*"
只保留一份在仓库根,其它移除或显式 extends。
怎么确认已经修好
- 重启 Cursor 后再触发一次原操作,确认不是会话内的临时状态。
- 切换到另一个仓库 / 另一台机器复现,区分是 Cursor 配置问题还是项目本身问题。
- 让同事打开同一个仓库重试,确认不是只有你的本地缓存被修好。
如果还是没修好
- 把复现路径缩到最小:单文件、单格式化动作、不开任何扩展。
- 回滚最近一次 Cursor 升级或
.vscode/settings.json改动。 - 在 forum.cursor.com 搜 “workspace settings override”;附 Cursor 版本 + 完整 settings.json。
- 抓 View → Output → Cursor 的日志,贴 Bug Reports 频道。
预防建议
- 加入新项目时第一件事:
cat .vscode/settings.json .cursor/settings.json .editorconfig。 - 团队文档里写一节”Cursor 推荐设置”,避免每人各自摸索。
- 把
.vscode/settings.json拆成 commit 版(团队共享)和.local版(个人,gitignore)。 - 给 AI 关键功能(composer / tab / cmd+k)建立”必须开”清单,加进 onboarding checklist。
- 用 Cursor Sync 把你的 user settings 跨设备同步,避免新机器又踩坑。