我使用 ctags (-e) 并且效果很好。但是,当我搜索成员函数时,ctags 返回它找到的第一个定义。例如:
ClassA classA;
classA.Initialize();
classA.DoSomething();
ClassB classB;
classB.Initialize();
classB.PerformAction();
如果我在我希望转到的标签Initialize()
(M-.
或g^]
)上搜索。如果碰巧有另一个类具有相同的方法,并且它的标签出现在标签文件中的标签之前,那么(假设是)我会被带到.classA.Initialize()
ClassA::Initialize()
classA
ClassB::Initialize()
ClassB::Initialize()
但是,如果当我键入M-.
并修改要访问的标签时,ClassA::Initialize()
我会转到ClassA::Initialize()
. 有没有办法让它自动化?
这种行为在 emacs 和 vim 中是一致的。
此外,使用 GNU 全局 (gtags) 甚至找不到ClassA::Initialize()
. 它只会打印出所有具有Initialize()
方法的类。
编辑:
如果问题还不清楚,我会问是否有一个插件可以检查方法(例如,它是通过.
or访问的成员函数->
),如果它会找到对象的类型,然后寻找Object::Method
而不是为方法。
这是一个简单的功能。例如:
- 检查标签是否是一种方法。
- 如果它是一个方法,它是一个类的成员。
- 如果类的成员在当前光标之前解析代码并找到声明(ClassA classA)。
- 查找
ClassA::Initialize()
以上所有内容是否为真,而不是Initialize()
.
那是不是更清楚了?