直接修改 settings.json 中的 editor.tokencolorcustomizations 和 workbench.colorcustomizations 即可生效,其他方式在 vscode 1.80+ 无效且重启丢失;需用 developer: inspect editor tokens and scopes 确认真实 token scope,注意语言后缀和结构修饰,并检查 json 格式、主题锁死及规则顺序。

直接改 settings.json 里的 editor.tokenColorCustomizations 和 workbench.colorCustomizations 就能生效,其余方式(比如改 CSS、装“主题美化”类插件、手动覆盖 monaco-editor 类)在 VSCode 1.80+ 全部无效,且重启即丢。
怎么确认某个语法元素的真实 token scope
别猜 string 或 keyword —— 实际作用域常带语言后缀或结构修饰。比如 TypeScript 的单行注释是 comment.line.double-slash.ts,不是通用的 comment;JS 模板字符串是 string.template.js,Python 的三引号字符串是 string.quoted.triple.python。
- 把光标停在目标代码上(例如一个
function关键字或一段// 注释) - 按
Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入并运行Developer: Inspect Editor Tokens and Scopes - 看弹窗右上角显示的 scope 列表,优先取最具体、带语言后缀的那个(如
keyword.control.flow.ts) - 若想只影响某语言,就在
textMateRules里加"language": "typescript"字段,避免 JS/Python 也被波及
为什么改了 settings.json 却没变色
三个高频卡点:JSON 格式错误、主题锁死、规则顺序错位。VSCode 不报错但静默失败,容易误以为配置无效。
-
settings.json多了一个逗号、少了一个引号,或括号不闭合——右下角虽有红色感叹号,但常被忽略;建议粘贴进在线 JSON 验证器跑一遍 - 某些主题(如
Nord、One Dark Pro)在扩展包里设了"_defaults": true,会强制忽略你的editor.tokenColorCustomizations;临时换回Default Dark+验证是否生效 - 多个
textMateRules匹配同一 token 时,后写的规则覆盖前写的;用Inspect Editor Tokens查看右下角 “Rule #X applied” 的序号,再调整数组顺序
第三方主题自带语法高亮时怎么绕过
像 Nord、Dracula Official 这类主题默认启用自己的 tokenColorCustomizations,你的设置会被直接吞掉。不能靠“写得更狠”覆盖,得关它的开关。
- 查该主题文档,找类似
nord.enforceSyntaxHighlighting或dracula.enableSyntaxHighlighting的配置项,设为false - 有些主题没提供开关(如老版本
One Dark Pro),就只能换用One Dark Pro v3.10.12+,它已支持string.template独立着色,且开放自定义入口 - 禁用主题自带高亮后,务必检查
comment、string、punctuation.bracket是否都显色正常——漏掉括号颜色会导致匹配背景失效
真正难的不是写对一行颜色值,而是判断哪个 scope 才是当前编辑器实际渲染所用的那一个;Inspect 工具点十次,比翻五页文档更可靠。











