如何在VSCode的tmLanguage.json中禁用嵌套块注释?
解决自定义语言非嵌套块注释的VSCode语法高亮配置问题
要实现不支持嵌套的块注释(即从第一个/*开始,到第一个*/结束,中间的/*仅作为注释内容,不触发新注释),你需要修改tmLanguage.json中的块注释配置,阻止内部/*触发递归的注释匹配:
{ "comment": "Block comment", "name": "comment.block.cxm", "begin": "/\\*", "end": "\\*/", "patterns": [ { "match": "/\\*", "name": "comment.block.cxm" } ] }
配置说明
- 原配置的问题在于:VSCode的语法高亮会递归应用规则,当注释内部出现
/*时,会被识别为新的注释起始点,导致需要额外的*/才能结束外层注释。 - 添加的
patterns规则会匹配注释内部的/*,并将其标记为当前注释的一部分,而非新的注释起始,这样整个注释块会从第一个/*持续到第一个*/结束,完美适配你提供的两种场景:- 单行带内部
/*的注释:/* /* */会被完整识别为单个注释块 - 多行带内部
/*的注释:
整个三行内容会被识别为单个注释块/* /* */
- 单行带内部
你之前尝试的begin: "/\\*[\\s\\S]*(?=\\*/)"错误地将注释内容合并到begin的匹配中,导致end规则无法正常触发,因此无法适配多行场景。
内容的提问来源于stack exchange,提问作者yuchenw
相关产品推荐
相关产品推荐

