我可以在 Sublime Text 语法中合并捕获吗?
Can I combine captures in Sublime Text syntax?
我正在为 V 编写语法,它定义了与 Go 语法相似的方法,其中:
fn (o MyStruct) my_function(a int) {
// ...
}
我可能会使用类似的东西(我会将其分解为 push
,但为了简洁起见):
variables:
ident: \b[A-Za-z_][A-Za-z_0-9]*\b
contexts:
fn:
- match: (fn)\s*\({{ident}}\s*({{ident}})\)\s*({{ident}})
captures:
1: keyword
2: entity.name.type.v
3: entity.name.function.v
但问题是 MyStruct
和 my_function
是分开索引的,所以同名的方法(str()
是一个很好的例子)对于索引器来说将不会是不同的。有什么方法可以将它们组合成单个 entity.name.function.v
的值 MyStruct.my_function
?
我知道我可以将整个定义视为实体,但这太冗长了,并且在拆分成多行时不起作用:
captures:
0: entity.name.function.v
如果您将 unbroken/continuous 范围应用于文本,您可以将其定位在 .tmPreferences
文件中(与默认的 entity.name
范围相反)并对其进行索引,然后制作使用“符号索引转换”删除 )
和空格。
- match: (fn)\s*\({{ident}}\s*(({{ident}})\)\s*({{ident}}))
captures:
1: keyword
2: meta.indexed-unit.v
3: entity.name.type.v
4: entity.name.function.v
现在范围 meta.indexed-unit.v
将适用于文本 MyStruct) my_function
。
符号索引转换基本上是适用于索引符号的正则表达式替换:
https://docs.sublimetext.io/reference/symbols.html#settings-subelements
因此您的 .tmPreferences
文件可能如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>scope</key>
<string>source.v meta.indexed-unit.v</string>
<key>settings</key>
<dict>
<key>showInIndexedSymbolList</key>
<string>1</string>
<key>symbolIndexTransformation</key>
<string>
s/\)\s*//;
</string>
</dict>
</dict>
</plist>
我正在为 V 编写语法,它定义了与 Go 语法相似的方法,其中:
fn (o MyStruct) my_function(a int) {
// ...
}
我可能会使用类似的东西(我会将其分解为 push
,但为了简洁起见):
variables:
ident: \b[A-Za-z_][A-Za-z_0-9]*\b
contexts:
fn:
- match: (fn)\s*\({{ident}}\s*({{ident}})\)\s*({{ident}})
captures:
1: keyword
2: entity.name.type.v
3: entity.name.function.v
但问题是 MyStruct
和 my_function
是分开索引的,所以同名的方法(str()
是一个很好的例子)对于索引器来说将不会是不同的。有什么方法可以将它们组合成单个 entity.name.function.v
的值 MyStruct.my_function
?
我知道我可以将整个定义视为实体,但这太冗长了,并且在拆分成多行时不起作用:
captures:
0: entity.name.function.v
如果您将 unbroken/continuous 范围应用于文本,您可以将其定位在 .tmPreferences
文件中(与默认的 entity.name
范围相反)并对其进行索引,然后制作使用“符号索引转换”删除 )
和空格。
- match: (fn)\s*\({{ident}}\s*(({{ident}})\)\s*({{ident}}))
captures:
1: keyword
2: meta.indexed-unit.v
3: entity.name.type.v
4: entity.name.function.v
现在范围 meta.indexed-unit.v
将适用于文本 MyStruct) my_function
。
符号索引转换基本上是适用于索引符号的正则表达式替换:
https://docs.sublimetext.io/reference/symbols.html#settings-subelements
因此您的 .tmPreferences
文件可能如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>scope</key>
<string>source.v meta.indexed-unit.v</string>
<key>settings</key>
<dict>
<key>showInIndexedSymbolList</key>
<string>1</string>
<key>symbolIndexTransformation</key>
<string>
s/\)\s*//;
</string>
</dict>
</dict>
</plist>