XML 的符号列表定义

Symbol list definition for XML

使用 Sublime Text 3,我一直在努力为 XML 文件获取一个看起来不错的符号列表定义。

到目前为止,我已经取得了一些可行的成果。对于此 XML 示例:

<?xml version="1.0" encoding="UTF-8"?>
<definition assembly="com.bla" version="1.0">
    <string name="parent"/>
        <child name="child" />
    </string>
</definition>

我可以得到:

使用:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>name</key>
    <string>Symbol List:</string>
    <key>scope</key>
    <string>text.xml meta.tag.xml</string>
    <key>settings</key>
    <dict>
        <key>showInIndexedSymbolList</key>
        <integer>1</integer>
        <key>showInSymbolList</key>
        <integer>1</integer>
    </dict>
</dict>
</plist>

但是,我想缩进父项下的子项并删除结束标记。这些可能吗?

您需要 the XML syntax definition to scope closing tags differently to be able to exclude them from the symbol list, as the logic which dictates what gets placed in the symbol list is based solely on the scopes assigned by the syntax definition. i.e. assuming you modified the syntax definition 将结束标签的范围设置为 meta.tag.xml.closing,您的范围选择器可能看起来像 <string>text.xml meta.tag.xml - meta.tag.xml.closing</string>,并且您只会获得开始(和自结束)标签.


至于缩进,这通常是通过使用 regex transformations 完成的,这并不是真正为递归嵌套设计的,因为通常没有足够的上下文可供正则表达式替换工作。

一种解决方法是再次修改语法定义以将元作用域应用于每个标记的内容,并有多个 tmPreferences 文件,每个文件都比前一个更具体地嵌套,并且只是对缩进进行硬编码,但这将限于您为正确处理多少嵌套而创建的文件数量,但无论 XML 文件的布局如何,它都会起作用。

如果您的 XML 文件已经很好地缩进了(- 并且有用于此的插件,如果没有-)那么您可以通过更改语法定义来实现您想要的效果打开标签。将其限定为 meta.tag 可能会干扰 ST 的一些依赖于此范围的内置命令,因此最好添加一个单独的范围来覆盖空白和标记本身,而保留原始 meta.tag范围完好无损。使用这种方法,符号将已经包含与文件相同的缩进,例如,您可以将 4 个空格转换为 1 个,以使符号索引看起来不像主文档那样缩进。