我在整个 LLVM + Clang 的大型代码库上使用 Sublime Text 3。我严重缺少的一件事是能够转到属于特定类的函数。
为了解释,假设我在一个包含 10 多个类的文件中,所有类都有一个名为getSourceRange()
. 当前goto symbol
功能仅索引方法名称,因此当我搜索此方法时,我会得到一堆相同的结果,我必须手动完成这些结果,直到找到正确的结果。在项目范围Goto Symbol
内使用更糟糕,因为冲突更多。
我想要的是索引符号名称始终包含类名,例如,VarDecl::getSourceRange
而不是getSourceRange
. 我可以通过删除C++/Symbol Index.tmPreferences
本质上是CLASS::
从索引名称中剥离的实现来为类外的实现启用此功能。但是我还不知道如何将类名注入到类范围内的定义中。
这些信息都在 TextMate 范围内,因此我可以从技术上为以下范围添加规则:
source.c++ meta.class-struct-block.c++ entity.name.function.c
但我不知道如何将类的名称作为字符串访问(存储在meta.class-struct-block.c++ » entity.name.type.c++
保存在 中C++.tmLanguage
),更不用说格式化函数的索引符号名称以包含它了。
如果可能的话,任何人都知道如何做到这一点?TextMate 的解释这些机制的页面并没有提到这是可能的,因为它的价值。
我的尝试,停留在如何将语法名称插入symbol(Index)?Transformation
:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>scope</key>
<string>source.c++ meta.class-struct-block.c++ entity.name.function.c</string>
<key>settings</key>
<dict>
<key>symbolIndexTransformation</key>
<string>/^/${entity.name.type.c++}::/;</string>
<key>symbolTransformation</key>
<string>/^/${entity.name.type.c++}::/;</string> <!-- just adds it literally :( -->
</dict>
</dict>
</plist>