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