在Emacs中跳转到声明的快捷键是什么?

36
在 Visual Studio 中,编辑 C/C++ 代码时,按 F12 按钮更容易跳转到函数或变量的声明。
在 Emacs 中是否有快捷键可以实现同样的功能?

问题太宽泛了,我认为。答案从Imenu到各种标签命令,再到任何数量的第三方功能都有。我建议从Emacs手册开始... - Drew
4个回答

31

其实,这要比那个复杂一点。

默认情况下,Emacs不能“识别”C或C++代码的函数声明。首先,获取Exuberant Ctags。然后,在源代码上使用etags命令(Emacs的ctags)。将生成一个名为TAGS的文件。

接下来,在编辑源代码时,当您想跳转到声明时,请按M-.(meta和点,或现代键盘上的alt和点)。起初,Emacs会要求您指定标记文件的位置。将其指向您生成的标记文件后,导航将自动进行。

我建议阅读关于标记的Emacswiki文章,以更好地理解此功能。

最新版本的Emacs(23.2)附带了CEDET集成,提供了更高级的C和C++导航功能,但设置起来可能有些困难,所以如果您感兴趣,可以阅读更多相关信息。


如何使Emacs跳转到函数的定义(实现)而不是声明(通常在头文件中的原型)?我使用ctags -R -e --c-kinds=cdefglmnpstuvx运行了ctags。 - Ahmed Fasih
3
另外值得一提的是组合键 M-*,它将允许您返回到起始位置(即使用 M-. 的位置)。您可以递归使用两者。 - init_js

19

按下 M-. 键可以带您进入emacs函数定义。


3
我认为这应该是正确的答案, 我也是通过偶然发现那个命令的 :)) - Favian Ioel P
4
Emacs标签文章标签文件文章提供了更多关于此命令的信息,请注意您需要让emacs创建TAGS文件,例如,使用命令行中的etags mycodefile.c - jrh
1
...我要如何跳回到之前的位置? - Thomas Sebastian
1
@ThomasSebastian 我听说 M- 可以解决这个问题。 - AER

14

如其他人所说,Emacs没有内置的通用解决方案来实现这个功能。尽管如此,在使用IntelliJ时我想在Emacs中也拥有相同功能,所以我创建了Dumb Jump

目前Dumb Jump对以下语言有基本支持:

  • JavaScript
  • Emacs Lisp
  • Python
  • Go
  • PHP
  • Ruby
  • Faust
  • 还有更多...(目前超过20种)

它可以通过MELPA获取,并且正在积极开发中。


7
有多种方法可以实现这一点。正如darioo所提到的,其中之一是使用Ctags,但默认情况下它会跳转到定义(这可能对您有用)。进一步地,您可以看到在前缀添加M-(即C-u M-.)将带您到下一个标签匹配项(通常是声明)。还有一个--declarations选项,但Exuberant Ctags似乎不支持它。
CEDET是另一个选择,但根据我的经验,它仍未准备好投入生产。在C++中,semantic-ia-fast-jump通常会跳转到前向声明而不是定义或声明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接