可在不替换主题前提下,通过 editor.tokencolorcustomizations → textmaterules 自定义语法颜色,用 developer: inspect editor tokens and scopes 获取准确 scope,设置 foreground 十六进制色值即时生效。

如何在不替换主题的前提下单独调整某类语法的颜色
VSCode 的语法高亮由语言扩展(如 vscode-eslint、vscode-python)提供 token 类型,再由当前主题映射为具体颜色。但你不需要动主题文件——editor.tokenColorCustomizations 允许你在用户设置里直接覆盖任意 token 的颜色。
常见误操作是去改 workbench.colorCustomizations,那是 UI 色彩(侧边栏、状态栏等),对代码文本无效。
- 打开设置(
Ctrl+,或Cmd+,),切到「JSON」标签页(右上角三个点 →Open Settings (JSON)) - 在
"editor.tokenColorCustomizations"下添加"textMateRules"数组 - 每条规则用
scope匹配 token 类型(比如support.type.python、keyword.control.js),用settings.foregroundColor指定十六进制色值 - scope 名称需通过「Developer: Inspect Editor Tokens and Scopes」命令实时获取,不能靠猜
快速定位你要改的 token scope:用内置检查工具
不同语言、不同扩展对同一语法元素的 scope 命名差异很大。比如 Python 的 self 在 Pylance 下是 variable.language.python,在旧版 Python 扩展下可能是 support.variable.self.python。手动查文档效率低,且容易配错。
- 在编辑器中把光标放在目标词上(例如一个函数名、一个注释、一个字符串)
- 按下
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入并执行Developer: Inspect Editor Tokens and Scopes - 面板会立刻显示当前光标位置的所有嵌套 scope,从最具体到最宽泛,优先选顶部那个带语言后缀的(如
entity.name.function.python) - 注意「foreground」列显示当前实际生效的颜色,方便你确认是否改对了位置
修改字符串/注释/关键字时的典型 scope 示例
这些 scope 覆盖多数场景,可直接复制进 settings.json 修改,但务必先用上一步检查确认是否匹配你的环境:
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "string",
"settings": { "foreground": "#A6E22E" }
},
{
"scope": "comment",
"settings": { "foreground": "#75715E" }
},
{
"scope": "keyword",
"settings": { "foreground": "#F92672" }
},
{
"scope": "entity.name.function",
"settings": { "foreground": "#66D9EF" }
}
]
}
-
string和comment是通用 scope,基本所有语言都支持;但若想只调 Python 字符串,就用string.quoted.double.python -
keyword会影响所有语言的关键字,如果只想改 JavaScript 的const,可用keyword.control.js - 颜色值必须是
#RRGGBB或#RGBA格式,不支持英文色名(如red)或rgb() - 改完保存,无需重启,颜色立即刷新
为什么改了没反应?几个关键排查点
最常被忽略的是 scope 优先级和扩展冲突。VSCode 按照「内建 token → 语言扩展注入 → 用户自定义」顺序合并样式,但某些扩展(如 Bracket Pair Colorizer 或主题增强插件)会劫持渲染流程。
- 检查是否启用了「Semantic Highlighting」:在设置里搜
editor.semanticHighlighting,设为false可排除语义高亮干扰(尤其对 TypeScript/Python) - 确认没有其他插件覆盖了同一 scope:禁用所有非必要扩展,只留语言支持插件,再测试
- scope 写错大小写或拼写(如把
comment写成comments)会导致整条规则失效,且无报错提示 - 如果使用了 Remote-SSH 或 WSL,确保修改的是远程环境的
settings.json(而非本地),可通过设置界面右上角切换「Remote » [your-host]」来验证
scope 名称不是 CSS class,没有继承关系,也不支持通配符。想精准控制,就得老实用检查工具抓取真实值。











