我正在使用一个古老的前XML标记,它使用“$ = x”形式的代码,其中x可以是字母字符或键盘上的符号,例如;
(分号) ,?
(问号)或<
(右左尖括号,又名大于小于)。 [编辑后的注意事项:原始措辞中出现的问题表现在问题的核心。请参阅我对已接受答案的评论。 RS]
所以我在我的User文件夹中修改了XML.tmLanguage语法定义文件的副本,以识别这些代码所代表的11个不同类别,因此我可以在大文本文件(也包含XML标记)中轻松查看它们我正在使用。
对于除<
之外的所有符号,我可以通过在反斜杠前加上符号来转义符号。但是在ST2使用的Boost正则表达式引擎中,\<
是指示您只想在单词的开头匹配的方式。因此,我无法正确识别和突出显示此代码。
在这种情况下,我到处寻找如何逃避<
符号。我试过用0,1,2,3和4反斜杠加注它;我也尝试使用十六进制转义码\x{3009}
。 [注意:这是大于而不是小于的代码。]
一切都是徒劳的。 (一些替代方案没有生成错误消息,但也没有突出显示代码。)
因为我正在处理的代码需要采用不同的颜色,我不能使用通用符号代替<
,我也不能指定它。我怎么得到这个?
答案 0 :(得分:2)
尝试使用>
作为语法文件。
答案 1 :(得分:2)
tmLanguage文件是用XML编写的,所以Sublime Text首先通过XML解析器提供它,然后再将它们提供给它的正则表达式引擎的解析器。
XML使用<
打开<string>
等标记,因此您无法将其直接用作字符。相反,有这些标准字符引用:
&
&
(&符号)
<
代表<
(小于)>
代表>
(大于;不需要)"
代表"
(引号;仅在"
引用的属性值中需要)'
代表'
(撇号;仅在'
引用的属性值中需要)所以在语法文件中使用<string>\$=<</string>
。当Sublime Text读取文件时,它自己的XML解析器会将其转换为\$=<
的正则表达式解析器。
反斜杠序列没有帮助,因为XML解析器将它们不加改变地传递给正则表达式解析器,后者然后看到\<
或\\
,这两者都不是你想要的。
\x{3008}
由XML解析器传递给正则表达式解析器,在那里它被解码为〈
,这个字符看起来有点像<
但与之不匹配。 \x3C
会起作用。
顺便说一句,tmLanguage文件使用plist(属性列表)XML,因此您可以将其转换为更易于编辑的格式,或者使用plist编辑器,例如http://tustin2121.github.io/jsPlistor/(来自Is there any online .plist editor?)