在Emacs中,如何使用C#更合理地使用imenu?

Che*_*eso 9 c# emacs emacs-speedbar

我已经使用了emacs很长一段时间,但我还没有跟上一堆功能.其中一个是speedbar,我现在只是简单地研究过.另一个是imenu.这两个都在in-emacs-how-can-can-between-functions-in-the-current-file中被提及

使用imenu,我可以跳转到我正在使用的模块中的特定方法.但是在我获得选择(使用自动完成)方法名称的选项之前,我必须协商一个解析层次结构.

它是这样的.我键入M-x imenu然后我可以选择UsingTypes.Using选项允许我跳转到C#文件顶层的任何using语句(类似于Java模块中的import语句,对于那些不了解C#的人来说).不是很有帮助.我选择类型.然后我必须选择命名空间和类,即使源模块中只有一个.那时我可以在变量,类型和方法之间进行选择.如果我选择方法,我最终会得到可供选择的方法列表.我遍历的层次结构看起来像这样;

Using
Types
  Namespace
    Class
      Types
      Variables
      Methods
         method names
Run Code Online (Sandbox Code Playgroud)

只有在我达到第5级后才能选择我真正想要跳到的东西:一种特殊的方法.

Imenu对源模块似乎很聪明,但有点难以使用.我做错了吗?

Eri*_*ric 2

http://cedet.sf.net上的 CEDET 工具在“contrib”区域中包含一个可以解析 C# 代码的 C# 解析器。然后,CEDET 支持 speedbar 和 imenu 的专用接口,这将以代码组织方式而不是标签类型组织方式塑造您的菜单结构。例如,在 C++ 中,代码如下:

namespace foo {
   class bar {
       int somemethod();
   }
}
Run Code Online (Sandbox Code Playgroud)

会给你一棵树,其中“foo”下有“bar”,“bar”下有“somemethod”,所以如果你知道你的结构,你只需要按名称展开到你想要的标签。