Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Emacs中最好地浏览源代码?_Emacs - Fatal编程技术网

如何在Emacs中最好地浏览源代码?

如何在Emacs中最好地浏览源代码?,emacs,Emacs,我有一个工作流程,我在shell中使用grep和其他工具在不同的项目中进行搜索,即使我的主编辑器是emacs。我通常致力于bug修复和源代码的小开发,而这些对我来说通常是未知的,所以搜索代码是很重要的。我主要使用的语言是php、ruby、java、perl,有时还有python emacs中是否有一些常见的IDE扩展,使我能够从跨所有这些语言的多个文件中获得类似“goto definition”的功能?是否还有其他一些有用的模块,代码浏览或索引搜索 如果你想使用多种不同的语言,它非常灵活。有关C

我有一个工作流程,我在shell中使用grep和其他工具在不同的项目中进行搜索,即使我的主编辑器是emacs。我通常致力于bug修复和源代码的小开发,而这些对我来说通常是未知的,所以搜索代码是很重要的。我主要使用的语言是php、ruby、java、perl,有时还有python


emacs中是否有一些常见的IDE扩展,使我能够从跨所有这些语言的多个文件中获得类似“goto definition”的功能?是否还有其他一些有用的模块,代码浏览或索引搜索

如果你想使用多种不同的语言,它非常灵活。有关CTAG集成的说明,请参见。

etags select
(您可以从ELPA获得)根据我的经验,如果绑定M-,则可以更好地浏览标记文件。要想
etags选择find tag
以及etags/ctags,请尝试使用M-x grep而不是在shell中运行grep,以在Emacs中获得可单击的链接,而不必手动查找与grep输出匹配的文件和行。

对于代码浏览,您还可以使用M-x imenu树

代码浏览可能意味着许多不同的事情。您提到的使用grep的模式对我来说意味着您正在寻找函数定义,或者可能正在寻找特定函数的用法

虽然CEDET支持您列出的所有语言(有些使用ctags解析器),但在为您列出的任务编制整个项目的索引之前,在新的源代码区域重新开始是CEDET不太擅长的。但是,您可以使用或。我认为idutils支持更多的语言

在CEDET中,“semantic symref”和相关命令将对grep、global或idutils(取决于您创建的标记表的类型)执行类似grep的操作。与grep样式的输出不同,symref输出缓冲区显示哪些函数正在使用该命令。然后,您可以在所关心的符号点击时执行宏来执行大型重构操作

CEDET还支持像跳转到函数这样的标记,不过如果您已经在使用像ctags这样的东西,它也可以正常工作。在某些情况下,当涉及到处理多态性时,CEDET更好

使用CEDET,您还可以通过imenu、speedbar和ECB(emacs代码浏览器)进行结构化浏览。ECB特别好,因为方法缓冲区允许您快速导航到类的不同部分。特别适合在类中传播的类,比如C++。CEDET甚至可以创建连接到代码的类继承结构的可爱的UML图


CEDET确实需要一些学习,您列出的一些语言并非所有工具都完全支持,尽管上面讨论的基本浏览应该可以。

标签浏览,具有动态完成、过滤(子字符串、regexp、fuzzy)、循环:


M-x rgrep
搜索整个目录树。CEDET是另一个明显的答案(虽然我不确定有多少种语言得到了深入支持),但我还没有深入研究过。