直接修改 settings.json 中的 workbench.colorCustomizations 和 editor.tokenColorCustomizations 即可定制 VSCode 颜色,前者控制 UI 元素(如侧边栏、标签页、状态栏),后者通过 textMateRules 控制代码文本(如字符串、关键字)着色,二者隔离且不可混用。

settings.json 里的 workbench.colorCustomizations 和 editor.tokenColorCustomizations 就行,不用写插件、不碰源码、不装额外工具——99% 的界面颜色问题都卡在这两个配置项没分清或写错位置。
workbench.colorCustomizations 是什么,该配哪些字段
它只管 UI 元素颜色:侧边栏、标签页、状态栏、活动栏、编辑器背景/前景这些「非代码文本」区域。填错地方或用了语法 token 名(比如 string、keyword)完全无效。
-
editor.background控制代码区底色,不是整个窗口背景;整窗背景由系统主题或窗口管理器决定,VSCode 不提供配置项 -
tab.activeBackground只对当前激活标签生效,但必须配合语言 ID(如"[python]")才能按文件类型染色,否则是全局覆盖 -
statusBar.background在深色主题下常被忽略,但若值设为"#000000"且当前主题本身带透明度,可能意外变黑到看不见文字——建议用#1e1e1e这类有灰阶的值保对比度 - 所有键名必须是 VSCode 官方定义的颜色令牌(color token),不能自创;查完整列表可运行命令
Developer: Generate Color Theme From Current Settings
editor.tokenColorCustomizations 怎么配才生效
它只影响代码文本本身的着色:变量、字符串、注释、函数名等。和 workbench.colorCustomizations 完全隔离,混用等于白写。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 必须用
textMateRules数组结构,单个对象里含scope和settings;直接写"string": "#ff0000"是无效 JSON 格式 -
scope不能靠猜,例如 Python 字符串实际可能是string.quoted.single.python,JS 是string.quoted.double.js;唯一可靠方式是光标停在目标词上,运行Developer: Inspect Editor Tokens and Scopes,取顶部第一个带语言后缀的 scope - 若同时装了多个语法高亮插件(如 Pylance + Python 扩展),scope 可能被覆盖;优先禁用非必要插件再调试
- 支持
fontStyle(值只能是"italic"、"bold"、"underline"或空字符串),不支持"bold italic"这种组合写法
为什么加了配置却没反应
不是代码写错,大概率是作用域冲突或加载顺序问题。
- 检查是否在工作区
.vscode/settings.json里写了同名配置,它会覆盖用户级设置;删掉或同步修改 - 某些主题(如
GitHub Theme)依赖系统暗色模式开关,系统未启用时它会回退到亮色变体,导致你配的深色规则被绕过 -
workbench.colorCustomizations中用了"[Monokai]"这类主题限定块,但当前激活的主题名其实是"Monokai Pro"(多一个空格或大小写不同)——主题名必须完全一致,包括空格和连字符 - 远程开发(SSH/WSL)时,
settings.json在本地客户端生效,但部分语言扩展未在远程端安装,会导致[python]这类语言块不触发
想发一个真正可用的主题插件,最少要几个字段
不是加个 colors 就完事——VSCode 主题文件(.json)强制要求 colors 和 tokenColors 同时存在,缺一不可。
-
colors是对象,键必须是预定义 color ID(如editorLineNumber.foreground),值支持#RRGGBBAA格式(带 alpha),但不支持rgb() -
tokenColors是数组,每项必须含scope(TextMate scope)和settings(含foreground等),不能只写注释用的name -
package.json中uiTheme字段只能设为"vs-dark"或"vs",设其他值会导致主题无法加载 - 发布前务必用
Developer: Inspect Editor Tokens and Scopes在真实文件中验证 scope 是否匹配,别依赖文档示例
support.function 会覆盖 support,但不会影响 entity.name.function;同一行代码可能叠加多个 scope,最终生效的是最具体那个——所以 inspect 工具里顶部第一行才是关键。

















