如何清除TextMate语法中字符串内转义块的高亮显示?
TextMate语法:字符串内转义块清除高亮方案
能否通过叠加plaintext作用域清除高亮?
可以,但受主题样式优先级限制。多数主题中string作用域的样式比plaintext更具体,单纯给转义内容叠加plaintext.my-language作用域会被字符串的样式覆盖,导致不生效。
可行解决方案:调整字符串规则的匹配优先级
需要在字符串的语法规则中优先匹配转义块,明确覆盖其作用域,具体操作有两种方式:
方式1:用begin/end规则精准定义转义块(推荐)
替换原有的match转义规则,在字符串的patterns中直接定义转义块的开始/结束标记,并给内部内容指定contentName:
{ "name": "string.quoted.single.my-language", "begin": "'", "end": "'", "patterns": [ { "begin": "\\{", "end": "\\}", "beginCaptures": { "0": { "name": "string.interpolated.escape.my-language" } }, "endCaptures": { "0": { "name": "string.interpolated.escape.my-language" } }, "contentName": "plaintext.my-language" } ] }
这种方式会让转义块内的内容优先应用plaintext.my-language作用域,直接覆盖字符串的着色规则。
方式2:在主题中强制提升plaintext作用域优先级
如果保留原有的match转义规则,需要在主题配置中给plaintext.my-language设置更高优先级的样式,强制覆盖字符串的颜色:
{ "scope": "plaintext.my-language", "settings": { "foreground": "#你的普通文本颜色", "fontStyle": "" } }
示例效果
目标实现:'字符串内容 {无高亮的转义内容} 再次回到字符串内容' 中,{}包裹的转义部分显示为普通文本样式,而非字符串的高亮颜色。
内容的提问来源于stack exchange,提问作者nefrob
相关产品推荐
相关产品推荐

