如何制作简单易懂的VSCode自定义语法高亮插件?
VS Code自定义语法高亮开发权威参考和完整流程
- 权威参考直接查询VS Code官方扩展文档中的「语法高亮开发」章节,以及TextMate语法规范即可,这两份资料是最完整的官方指引,覆盖从项目初始化到规则调试、发布的全流程,无步骤缺失。
- 完整入门流程可按以下步骤执行:
- 用Yeoman的code-generator生成基础扩展骨架,你已完成该步骤
- 编辑生成的
syntaxes/*.json配置文件,也就是你当前贴出的文件,定义语法匹配规则 - 在
package.json中配置语言关联,指定文件后缀对应的语言ID、语法文件路径 - 按F5启动扩展开发宿主窗口,打开对应后缀的测试文件,实时验证高亮效果
- 调用VS Code内置的「开发人员: 检查编辑器令牌和作用域」命令调试匹配规则,确认每个字符对应的作用域是否符合预期
- 规则调试完成后打包扩展,即可本地安装或发布到插件市场
现有配置问题优化
你当前的配置代码如下:
{ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "name": "BetterMarkupLanguage", "patterns": [ { "include": "#keywords" }, { "include": "#strings" } ], "repository": { "keywords": { "patterns": [{ "name": "entity.other.bml", "match": "\\b({|}|\\\\|//)\\b" }] }, "strings": { "name": "string.quoted.double.bml", "begin": "`", "end": "`" } }, "scopeName": "source.bml" }
可优化点如下:
- 当前的keywords匹配规则存在逻辑错误:
\b是单词边界标识符,仅匹配单词字符(字母、数字、下划线)和非单词字符的交界,而{、}、\、//都不属于单词字符,\b规则会直接失效,对应符号无法被匹配到,把match规则改成"([{}]|\\\\|//)"即可正常匹配 - 字符串规则如果要支持转义符,可以新增
patterns配置,匹配反斜杠加任意字符的转义规则,避免字符串内的反引号意外闭合 - 后续新增规则优先使用通用的作用域命名,比如关键字用
keyword.control.bml,注释用comment.line.bml,可自动适配绝大多数主题的配色,不需要额外自定义主题色
内容的提问来源于stack exchange,提问作者acaiberii
相关产品推荐
相关产品推荐

