如何让VS Code的tokenColorCustomizations规则仅作用于C文件?
问题描述
我正在使用Visual Studio Code的Gruvbox主题,在settings.json中有如下配置:
"editor.tokenColorCustomizations": { "[Gruvbox Dark Medium]": { "textMateRules": [ { "scope": "source.c, entity.name.function.preprocessor", "settings": { "foreground": "#eb9b82" } } ] } },
该配置可修改C宏的颜色,但打开Rust文件时,Rust宏也被修改了颜色,尽管scope字段包含source.c。Rust宏末尾带有感叹号,我不希望它们被改色。
附截图:
- 无上述配置时
println!宏的VS Code令牌检查器:
- 启用上述配置后的令牌检查器:

请问如何让该设置仅应用于C文件?
解决方案
问题出在你的scope写法上,source.c, entity.name.function.preprocessor是两个独立的作用域,意味着所有匹配entity.name.function.preprocessor的令牌都会被改色,不管当前是不是C文件。
要让规则仅作用于C文件里的宏,需要把两个作用域合并成嵌套关系,用空格连接表示“同时满足”:
"editor.tokenColorCustomizations": { "[Gruvbox Dark Medium]": { "textMateRules": [ { "scope": "source.c entity.name.function.preprocessor", "settings": { "foreground": "#eb9b82" } } ] } },
这样规则就只会匹配C文件(source.c)中的entity.name.function.preprocessor令牌,Rust文件里的宏就不会被影响了。
内容的提问来源于stack exchange,提问作者ultrapoci
相关产品推荐
相关产品推荐

