Visual Studio基于TextMate语法的自定义语言:语法高亮映射与自定义高亮配置问题
Visual Studio基于TextMate语法的自定义语言:语法高亮映射与自定义高亮配置问题
嘿,我来帮你搞定这两个自定义语言高亮的问题,这确实是刚上手TextMate语法时容易卡壳的点~
一、怎么知道TextMate的name对应VS字体颜色设置里的哪个选项?
最直接也最准确的方法是用VS自带的令牌检查工具:
- 按下
Ctrl+Shift+P打开命令面板,输入Inspect Editor Tokens and Scopes并选中这个命令; - 把光标移到你想查看的关键字/文本上,右侧就会弹出一个面板,里面会显示当前文本的所有作用域层级(就是你在
mylanguage.json里写的name值),以及对应的VS「字体和颜色」设置里的显示项名称。比如你问的entity.other.attribute-name,用这个工具就能直接看到它在VS里对应的UI选项,完全不用瞎猜。
另外补充一下,VS默认会把通用的TextMate作用域映射到内置的高亮项,比如keyword.control对应「关键字」,string.quoted对应「字符串」,但自定义的特殊作用域还是用上面的工具查最靠谱。
二、如何给自定义作用域设置专属高亮样式?
你猜的没错,模板里的Themes文件夹就是干这个用的,具体步骤如下:
1. 编写自定义主题文件
在Themes文件夹里新建一个JSON文件(比如mylanguage-custom-theme.json),按照VS的主题规范来写,举个符合你需求的例子:
{ "$schema": "vscode://schemas/color-theme", "type": "light", // 可选值:dark/light/highContrast,对应不同基础主题 "name": "我的自定义语言主题", "tokenColors": [ { "scope": "keyword.other.mylanguage.specialkeyword", "settings": { "foreground": "#FF0000", // 红色文字 "background": "#FFF2F2", // 浅红背景 "fontStyle": "bold underline" // 加粗+下划线 } } ] }
⚠️ 注意:VS目前不支持「闪烁」文本效果,这个需求暂时没法实现哦。
2. 在扩展配置里注册主题
打开项目的package.json,在contributes字段里添加主题注册信息:
"contributes": { // 其他配置... "themes": [ { "label": "我的自定义语言主题", "uiTheme": "vs", // 对应light主题;dark用vs-dark,高对比度用hc-black "path": "./themes/mylanguage-custom-theme.json" } ] }
3. (可选)不用单独主题,直接给现有主题加规则
如果你不想让用户切换主题,只想让自定义作用域在任何主题下都生效,可以直接在package.json里添加textMateRules:
"contributes": { // 其他配置... "textMateRules": [ { "scope": "keyword.other.mylanguage.specialkeyword", "settings": { "fontStyle": "bold underline", "foreground": "#E51400" // 直接指定颜色,或者用主题变量比如${editor.errorForeground} } } ] }
这样不管用户用的是默认的浅色、深色还是其他第三方主题,你的特殊关键字都会应用这个样式。
备注:内容来源于stack exchange,提问作者sayanel
相关产品推荐
相关产品推荐

