直接修改 settings.json 中的 editor.tokencolorcustomizations 即可生效,需用 developer: inspect editor tokens and scopes 获取精准 scope,配置 textmaterules 规则,避免被第三方主题覆盖或写错位置。

怎么用 editor.tokenColorCustomizations 直接改代码颜色
直接在 settings.json 里加 editor.tokenColorCustomizations 就能生效,不用装插件、不用写主题包。这是最轻量也最常用的改法。
- 打开命令面板(
Ctrl+Shift+P或Cmd+Shift+P),执行Preferences: Open Settings (JSON) - 在顶层对象里插入字段:
"editor.tokenColorCustomizations": { "textMateRules": [...] }—— 注意不是数组,是对象;textMateRules才是推荐写法,兼容性更好 - 每条规则必须含
scope和settings,比如想改 JS 中的console.log颜色:{"scope": "support.function.console.js", "settings": {"foreground": "#ff6b6b"}} - 别写
"keyword": {"foreground": "..."}这种宽泛 scope,匹配慢还容易被其他规则覆盖;优先用带语言后缀的完整链,比如keyword.control.ts而不是keyword
为什么改了 settings.json 却没反应
VS Code 不报错,只沉默忽略。常见原因就三个,顺序排查比重装插件快得多:
-
scope写错了:不是“注释颜色”,而是comment.line.double-slash或comment.block—— 必须用Developer: Inspect Editor Tokens and Scopes命令实时取,光标停在目标代码上,看面板顶部第一个 scope - 配置位置错了:不能塞进
workbench.colorCustomizations,也不能写在用户界面设置里;必须是settings.json的顶层字段 - 被第三方主题覆盖了:One Dark Pro、Nord 等主题自带
tokenColors,会压过你的editor.tokenColorCustomizations;临时切回Default Dark+测试,或关掉主题的语法强化开关(如"nord.enforceSyntaxHighlighting": false)
如何避免 scope 冲突和性能问题
scope 匹配不是“越宽越好”,而是越具体、越少匹配项,越稳。
- 同一 token 可能有多个 scope,比如一个
const同时匹配keyword、keyword.control.js、keyword.control.ts;选最上面那条(最具体)才能精准控制 - 不要用
identifier这种全局 scope,它在大文件里会拖慢渲染;改variable.other.readwrite.ts或support.class.nodejs这类带上下文前缀的 - 颜色值必须合法:
#rrggbb、#rrggbbaa、rgba(...)都行,但red这类命名色不推荐,部分语言插件不认 - 如果想整体提亮/压暗,加一条 fallback 规则:
{"scope": ["*"], "settings": {"foreground": "adjust(var(--vscode-editor-foreground, #abb2bf))"}}—— 不过这个需要主题支持 CSS 变量,多数默认主题不带,慎用
editor.selectionBackground 怎么单独调,不被主题吞掉
选中文本背景色是独立控制项,跟语法高亮无关,但特别容易被插件或主题劫持。
- 只改
editor.selectionBackground字段就行,值用#rrggbb或rgba(r,g,b,a),alpha 推荐 0.3–0.6;rgb()和命名色不支持 - 别指望
workbench.colorCustomizations里的同名字段生效 —— 它只管 UI 元素,不管编辑器内选区 - 某些插件(如 Bracket Pair Colorizer)会重绘 DOM,导致你设的颜色完全不显示;关掉插件再试
- 第三方主题可能在
tokenColors里硬编码了editor.selectionBackground,优先级高于settings.json;验证方法:切到Default Dark+,颜色立刻回来,那就是主题在作祟 - 记得同步设
editor.inactiveSelectionBackground,否则切到终端后选区变黑或消失 —— 它不会自动继承前者
Developer: Inspect Editor Tokens and Scopes 面板右下角“已生效规则”那一栏,比查文档快十倍。











