如何自定义VSCode语法高亮的tmLanguage.json主题配置
1. 自定义可覆盖的自动换行设置
直接在扩展的package.json中配置语言级默认编辑器参数即可,无需额外编写功能代码:
在contributes节点下新增configurationDefaults配置,指定MyScript语言的默认换行行为:
"contributes": { "configurationDefaults": { "[myscript]": { "editor.wordWrap": "on" } } }
用户后续可直接在自己的VSCode配置中修改[myscript]对应的editor.wordWrap值覆盖默认设置,完全符合自定义可配置的需求。
2. 适配默认主题的scope选择规则
VSCode所有官方默认主题都遵循TextMate通用scope命名规范,只需将语法元素映射到对应通用scope即可实现你要的配色效果:
- 实体(术语)显示默认黑色:不要使用
entity.name.type这类带特殊配色的scope,替换为variable.other.myscript即可,默认主题不会给该scope加特殊配色,会继承普通文本的黑色 - 字符串显示蓝色:你当前使用的
string.myscript配置正确,默认主题string大类统一为蓝色,和你参考的JSON字符串配色一致 - 数字显示绿色:你当前使用的
constant.numeric前缀scope配置正确,默认主题constant.numeric大类统一为绿色 - 标点显示灰色:所有标点统一使用
punctuation.开头的scope,默认主题punctuation大类统一为灰色
3. 括号、逗号样式异常修正
你当前的tmLanguage.json存在三处配置错误,修正后即可解决样式问题:
- 修正规则引用拼写错误
你在terms节点的括号匹配规则的patterns中写的是includes,多了一个字母s属于无效配置,导致括号内的逗号、标点无法命中你定义的punctuations规则,才会显示为红色,把所有includes改为include即可。 - 给函数调用括号单独标记scope
你当前把xxx(到)整体标记为entity.name.type大类,导致括号也跟着变成青绿色,修改这部分规则添加括号的单独捕获配置即可:
{ "begin": "([a-z][a-z0-9]*(?:-[a-z0-9]+)*)(\\()", "beginCaptures": { "1": { "name": "entity.name.type.language.parens.myscript" }, "2": { "name": "punctuation.paren.open.myscript" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.paren.close.myscript" } }, "patterns": [ { "include": "#terms" }, { "include": "#strings" }, { "include": "#numbers" }, { "include": "#punctuations" } ] }
- 修改字符串内花括号的scope
你当前给字符串内的花括号标记的是meta.brace.curly.myscript,meta开头的scope默认主题没有匹配配色,会被上层的字符串配色逻辑覆盖,改为punctuation.brace.curly.myscript即可命中标点的灰色配色规则。
内容的提问来源于stack exchange,提问作者Lance Pollard
相关产品推荐
相关产品推荐

