如何用VSCode Highlight插件高亮多行注释块中的TODO内容
实现VSCode Highlight插件多行TODO注释高亮的解决方案
我找了不少资料没找到合适的方法,自己摸索出了可行的方案,分享给大家。
VSCode的Highlight插件可以通过正则匹配高亮TODO、FIXME这类标记,但官方提供的通用正则不仅复杂难改,还没法匹配多行的TODO注释内容——比如下面这段Python代码,只有第一行的TODO会被高亮,后面的多行注释内容不会被匹配:
# TODO (example): only this line is highlighted :( the rest of my # extensive note on multiple lines # is not matched. def my_code(something): does_something()
解决方法:自定义多行匹配正则
我们可以简化正则,针对单行注释风格的语言(比如Python、Shell等),写一个支持多行匹配的规则,替换原有的配置。以下是修改后的settings.json配置示例:
"highlight.regexFlags": "gi", "highlight.regexes": { // 匹配单行注释开头的TODO及后续同风格注释行 "(#\\s*TODO(?:\\s*\\([^)]+\\))?:?)([\\s\\S]*?)(?=\\n[^#]|$)": { "filterFileRegex": ".*\\.(py|sh|md)$", // 可根据需要添加文件后缀 "decorations": [ { "overviewRulerColor": "#ffcc00", "backgroundColor": "#ffcc00", "color": "#1f1f1f", "fontWeight": "bold" }, { "backgroundColor": "#ffcc00", "color": "#1f1f1f" } ] }, // 可添加FIXME等其他标记的规则,格式同上 "(#\\s*FIXME(?:\\s*\\([^)]+\\))?:?)([\\s\\S]*?)(?=\\n[^#]|$)": { "filterFileRegex": ".*\\.(py|sh|md)$", "decorations": [ { "overviewRulerColor": "#ff6666", "backgroundColor": "#ff6666", "color": "#1f1f1f", "fontWeight": "bold" }, { "backgroundColor": "#ff6666", "color": "#1f1f1f" } ] } }
正则说明
#\\s*TODO(?:\\s*\\([^)]+\\))?:?:匹配以#开头,后面跟着可选空格、TODO标记,以及可选的括号内备注(比如TODO (example))([\\s\\S]*?):非贪婪匹配所有内容(包括换行),直到遇到终止条件(?=\\n[^#]|$):终止条件——下一行不是以#开头的注释,或者到达文件结尾
适配其他语言
如果是使用//作为单行注释的语言(比如JavaScript、Java),只需要把正则中的#替换成//即可,示例:
"(//\\s*TODO(?:\\s*\\([^)]+\\))?:?)([\\s\\S]*?)(?=\\n[^/]|$)": { "filterFileRegex": ".*\\.(js|java|ts)$", "decorations": [ // 装饰配置同上 ] }
内容的提问来源于stack exchange,提问作者marting
相关产品推荐
相关产品推荐

