最可靠的方式是同时导出workbench.colorCustomizations、editor.tokenColorCustomizations和editor.semanticTokenColorCustomizations三类配置,缺一不可;其中semanticTokenColorCustomizations还需确保对应语言扩展已安装且"editor.semanticHighlighting": true已启用。

直接复制 settings.json 是外观配置导出最可靠的方式,但只复制文件本身远远不够——VSCode 的外观由三类互不兼容的配置共同驱动,漏掉任何一类都会导致“主题变了但括号还是灰色”这类静默失效。
workbench.colorCustomizations、tokenColorCustomizations、semanticTokenColorCustomizations 必须同时导出
VSCode 没有“导出主题”按钮,所谓外观其实是三块拼图:
-
workbench.colorCustomizations:管 UI(侧边栏、状态栏、标签页背景等),值是键值对对象,比如"statusBar.background": "#41A863" -
editor.tokenColorCustomizations:管语法色(字符串、注释、关键字),必须是{"textMateRules": [...]}结构,每条 rule 含"scope"和"settings",不能写成"foreground"单层 -
editor.semanticTokenColorCustomizations:管语义着色(如 TypeScript 类型名、Python 变量作用域),依赖语言服务器启用;如果目标机器没装ms-python.python或ms-vscode.vscode-typescript-next,整块会被忽略
只复制 workbench.colorCustomizations 过去,编辑器 UI 会变,但代码里所有颜色仍是默认灰——这不是 bug,是 VSCode 的加载策略:三者独立解析,缺一不可。
用 Developer: Inspect Editor Tokens 只能辅助,不能替代人工校验
这个命令(Ctrl+Shift+P → 输入 Developer: Inspect Editor Tokens and Scopes)只告诉你当前光标处的 scope,比如 string.quoted.double.js。但它不会告诉你:
- 你是否真在用这个 scope(可能你只改了 Python 的
comment,inspect 出来却是 JS 的function) - 第三方主题(如 One Dark Pro)是否已覆盖你的
textMateRules——它不报错,只是静默丢弃 -
editor.tokenColorCustomizations必须放在settings.json顶层,塞进workbench.colorCustomizations里完全无效
导出前必须手动清理三类危险字段
外观配置常混入路径、平台或插件强依赖项,跨机器后会导致部分失色甚至加载失败:
- 绝对路径类:
"files.exclude"或"search.exclude"中含C:\Users\、/home/、/Users/—— 直接删或注释整行 - 平台专属类:
"terminal.integrated.fontFamily"在 macOS/Linux 下可能触发警告;"terminal.integrated.profiles.windows"在非 Windows 上无法解析 - 插件强依赖类:
"todo-tree.tree.showScanModeButton"、"prettier.bracketSpacing"—— 新机器没装对应插件时,VSCode 直接跳过该行,可能导致颜色链断裂
建议在 VSCode 里用 Ctrl+F 搜索 ": " 后跟引号,逐行核对 scope 是否合法、字段是否跨平台、插件是否已在目标环境安装。
真正容易被忽略的是:editor.semanticTokenColorCustomizations 的生效前提是语言扩展已激活且语义高亮开启(比如 Python 需 "editor.semanticHighlighting": true)。很多用户导出时只盯着颜色值,却忘了检查这个开关是否在 settings.json 里显式设为 true,结果迁移后语义色全无——不是配置丢了,是根本没启动。


















