我已经使用emacs很长时间了,但是我没有跟上一系列的特性。其中之一是speedbar,我刚刚对其进行了简单的调查。另一个是imenu。这两个都在
in-emacs-how-can-i-jump-between-functions-in-the-current-file?
使用imenu,我可以跳转到正在处理的模块中的特定方法。但是有一个解析层次结构,在我得到选择方法名(自动完成)的选项之前,我必须进行协商。
就像这样。我输入M-x imenu
然后选择Using
或Types
。using选项允许我跳转到c文件顶层的任何using语句(类似于java模块中的imports语句,适用于那些不了解c的用户)。不是很有用。我选择类型。然后我必须选择一个名称空间和一个类,即使源模块中只有一个名称空间和一个类。在这一点上,我可以在变量、类型和方法之间进行选择。如果我选择方法,我最终会得到方法列表。我遍历的层次结构如下所示;
Using
Types
Namespace
Class
Types
Variables
Methods
method names
只有到了第五级,我才能选择我真正想跳到的东西:一种特殊的方法。
imenu看起来对源模块很聪明,但是有点难用。我做错了吗?
最佳答案
位于http://cedet.sf.net的cedet工具在“contrib”区域中包含一个C解析器,可以解析C代码。然后,cedet支持speedbar和imenu的专用接口,它们将以代码组织的方式而不是标记类型组织的方式来塑造菜单结构。例如,在C++中,这样的代码:
namespace foo {
class bar {
int somemethod();
}
}
会给你一棵树,在“foo”下有“bar”,在“bar”下有“somemethod”,所以如果你知道你的结构,你只需要按名称展开到你想要的标签。