XML的符号列表定义

时间:2018-06-26 05:39:31

标签: xml sublimetext3 symbols

使用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>

我可以得到:

Symbols

使用:

<?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>

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

1 个答案:

答案 0 :(得分:1)

您将需要the XML syntax definition to scope closing tags differently才能将它们从符号列表中排除,因为指示放置在符号列表中的内容的逻辑仅基于语法定义所分配的范围。例如,假设您将syntax definition的作用域结束标记修改为meta.tag.xml.closing,则作用域选择器看起来像<string>text.xml meta.tag.xml - meta.tag.xml.closing</string>,并且您只会得到开始标记(和自闭合标记)。


对于缩进,通常是通过使用regex transformations来完成的,它实际上并不是为递归嵌套而设计的,因为通常没有足够的上下文可用于正则表达式替换。

一种解决方法是再次修改语法定义,以将元作用域应用于每个标签的内容,并具有多个tmPreferences文件,每个文件都比上一个进行更具体的嵌套操作,而且很难-对缩进进行编码,但这将限于为正确处理多少嵌套而创建的文件数,但无论XML文件的布局如何,该方法都可以使用。

如果您的XML文件已经很好地缩进了(-,并且有插件,如果没有,则-),那么您可以通过更改语法定义以在open标记之前限制空白来实现所需的功能。将其范围设置为meta.tag可能会干扰一些依赖于此范围的ST内置命令,因此也许最好添加一个单独的范围来覆盖空白和标签本身,而保留原始的{{1} }范围保持不变。使用这种方法,符号将已经包含文件中相同的缩进,例如,您可以将4个空格转换为1,以使符号索引不像主文档那样缩进。