C++ ctags c++;查找函数的第一个实例,而不考虑类
我使用CTAG(-e),它工作得非常好。但是,当我搜索成员函数时,ctags返回它找到的第一个定义。例如:C++ ctags c++;查找函数的第一个实例,而不考虑类,c++,c,linux,vim,emacs,C++,C,Linux,Vim,Emacs,我使用CTAG(-e),它工作得非常好。但是,当我搜索成员函数时,ctags返回它找到的第一个定义。例如: ClassA classA; classA.Initialize(); classA.DoSomething(); ClassB classB; classB.Initialize(); classB.PerformAction(); 如果我在classA.Initialize()上搜索标记Initialize()(M-.或g^]),我希望转到classA::Initialize()。
ClassA classA;
classA.Initialize();
classA.DoSomething();
ClassB classB;
classB.Initialize();
classB.PerformAction();
如果我在classA.Initialize()
上搜索标记Initialize()
(M-.
或g^]
),我希望转到classA::Initialize()
。如果碰巧有另一个类使用相同的方法,并且它的标记出现在标记文件中classA
的标记之前,那么(假设这是ClassB::Initialize()
),我会被带到ClassB::Initialize()
)
但是,如果当我键入M-。
并将我要访问的标记添加到ClassA::Initialize()
时,我会转到ClassA::Initialize()
。有没有办法让它自动化
这种行为在emacs和vim中是一致的
此外,使用GNU global(gtags)甚至找不到ClassA::Initialize()
。它将只打印出具有Initialize()
方法的所有类
编辑:
如果问题还不清楚,我会问是否有一个插件可以检查方法(例如,它是通过
或->
访问的成员函数),如果是,它会找到对象的类型,然后查找对象::方法
,而不是方法
这是一个简单的功能。例如:
ClassA classA;
classA.Initialize();
classA.DoSomething();
ClassB classB;
classB.Initialize();
classB.PerformAction();
ClassA::Initialize()
,而不是Initialize()
这更清楚了吗?Ctags只为代码编制索引。当编辑器完成搜索时,您只能使用它生成一个
标记
文件。如何进行搜索是编辑的事,ctags与此无关
当您对方法名执行
操作时,Vim跳转到它找到的第一个匹配项。因为它无法分析您的代码和想法,所以它无法决定您真正想要的匹配项
它最接近于“优先级”的概念,请参见:h tag priority
,但它并不能真正帮助您
处理该限制的通常方法是使用一个列出所有匹配项的命令,如
g]
或g
是的,CTAG和gtags都无法消除ClassA::Initialize()和ClassB::Initialize()之间的歧义,这意味着您必须为它们提供更多信息(例如,通过在列表中选择gtags输出)。您能更清楚地说明您的问题是什么吗?可能重复或使用:tn
,直到找到您想要的。事实上,这是以破坏标记堆栈为代价的。