最有效方法是直接修改 editor.tokencolorcustomizations;需通过 developer: inspect editor tokens and scopes 获取精准 scope,用 textmaterules 配置前景色,避免 scope 过宽或过窄导致失效。

直接改 editor.tokenColorCustomizations 最有效,别指望换主题就自动变字体颜色——主题只提供默认值,真要调某个语法元素(比如函数名、字符串)的颜色,必须手动配作用域和前景色。
怎么精准改某类代码的字体颜色
VSCode 的「字体颜色」实际是语法高亮层的颜色,不是整个编辑器的文本色。想改函数名、注释、变量这些,得靠 textMateRules 匹配作用域(scope),不是改 editor.foreground(那是整个编辑器的 fallback 文本色,极少用)。
- 打开命令面板(
Ctrl+Shift+P或Cmd+Shift+P),运行Preferences: Open Settings (JSON) - 在
settings.json里添加或合并editor.tokenColorCustomizations字段 - 把光标停在目标代码上(比如一个
console.log),再运行Developer: Inspect Editor Tokens and Scopes,看右上角显示的 scope 列表,挑最具体那个(如support.function.console.js比support.function更准,也更局限) - scope 写错、颜色值无效、JSON 格式多逗号或少引号,都会静默失效
常见改错:为什么改了没反应
不是配置不生效,而是规则没命中。VSCode 的 token 颜色优先级很细,容易被覆盖或忽略。
- 你改的是用户设置,但当前工作区也有
editor.tokenColorCustomizations—— 工作区设置会完全覆盖用户设置 - scope 太宽(比如只写
function):TextMate 里根本不存在这个 scope,规则被丢弃 - scope 太窄(比如
entity.name.function.python):只在.py文件生效,切到 JS 就没了 - 某些语言(如 TypeScript)里,同一个词可能属于多个 scope,而只有最具体的那条规则起作用
- 保存后不用重启,但要等 1–2 秒,VSCode 才刷新高亮
终端、行号、选中文本的颜色在哪配
这些不属于语法高亮,不能用 editor.tokenColorCustomizations,得走另一套配置:workbench.colorCustomizations 或 terminal.integrated.colors。
- 选中文本背景色:配
selection.background(注意不是selectionForeground,后者极少用) - 行号颜色:用
editorLineNumber.foreground - 集成终端文字色:
terminal.integrated.colors.foreground,同时建议一并设background和cursor,否则对比度崩坏 -
workbench.colorCustomizations里不能写 scope,只接受固定 key,比如activityBar.background、tab.activeBackground
真正难的不是写几行 JSON,而是搞清你要改的到底属于哪一层:是语法 token?是 UI 元素?还是终端语义色?scope 名不对、层级配错,颜色就永远卡在“看起来该变却没变”的状态。











