Live Share 默认不共享或同步 settings.json,因其被设计为本地偏好而非协作上下文;协作者始终读取自身 settings.json,仅当启用 "liveshare.shareSettings": true 且配置为扁平键值对时,指定设置才广播生效。

Live Share 会话中,settings.json 默认不共享,也不自动同步——这是协作时最常被误以为“已生效”却实际失效的点。
为什么工作区设置在 Live Share 里不生效
VSCode 的 Live Share 协议明确将用户级和工作区级 settings.json 视为“本地偏好”,而非“协作上下文”。即使你作为主机修改了 .vscode/settings.json,加入会话的协作者仍读取自己机器上的同名文件(或 fallback 到默认值)。这不是 bug,是设计选择:避免强制覆盖他人编辑器习惯。
- 协作者看到的字体大小、缩进、主题等,全部来自其本地
settings.json,与主机无关 -
.vscode/settings.json文件内容本身会被传输(可被协作者查看),但 VSCode 不会主动加载它 - 语言特定设置(如
"[python]": { "editor.formatOnSave": true })同样不触发同步
如何让关键设置真正对协作者起作用
必须把需要协同生效的配置,显式注入到 Live Share 的运行时上下文中。目前唯一可靠路径是通过 liveshare.settings 命名空间 + settings.json 中的 "liveshare.shareSettings" 开关。
- 在项目根目录的
.vscode/settings.json中添加:{ "liveshare.shareSettings": true, "editor.tabSize": 2, "files.autoSave": "afterDelay", "editor.formatOnSave": true } - 只有标在
"liveshare.shareSettings": true同一 JSON 对象层级下的设置项才会被 Live Share 拦截并广播给协作者 - 不支持嵌套对象(如
"[typescript]"块),只接受扁平键值对 - 协作者端无需额外操作——只要 Live Share 扩展版本 ≥1.0.5980(2026 年 7 月后默认内置),这些设置就会临时覆盖其本地对应项
多根工作区下 settings.json 共享的陷阱
多根工作区(multi-root workspace)中,每个文件夹可能自带 .vscode/settings.json。Live Share 只广播“主工作区根目录”的 .vscode/settings.json,其余子文件夹的设置完全忽略。
- 如果你把
eslint.enable放在子项目 A 的.vscode/settings.json里,协作者不会收到该配置 - 解决方法:统一收口到工作区文件(
my-workspace.code-workspace)的"settings"字段中,并启用"liveshare.shareSettings": true - 注意
my-workspace.code-workspace本身不是 JSON5,不支持注释;且其中的"settings"优先级低于各文件夹内settings.json,所以必须确保没有冲突覆盖
调试器、终端、任务等依赖设置的协作表现
像 launch.json、tasks.json、extensions.json 这类文件,Live Share 会原样共享并启用——但它们的执行效果仍受制于协作者本地环境。
-
launch.json中的"program"路径若写死为/Users/you/project/out/main,协作者路径不同会导致启动失败 - 推荐用 VSCode 变量:
"program": "${workspaceFolder}/out/main",该变量在协作者端会被正确解析为其本地workspaceFolder -
tasks.json中的"args"若含绝对路径(如"-I /usr/local/include"),需改用${env:HOME}或${config:files.defaultLanguage}等跨平台变量 - 扩展列表(
.vscode/extensions.json)仅提示协作者“建议安装”,不强制安装;协作者仍需手动启用对应扩展才能触发相关功能
真正的协作一致性不在配置文件是否可见,而在所有路径、变量、端口、模型 ID 是否收敛到可复现的上下文。哪怕共享了 settings.json,如果 liveServer.settings.port 写死为 5500,而协作者本机该端口被占,服务照样起不来——这时候,"liveServer.settings.port": 0(自动选空闲端口)比任何共享都管用。


















