emacs:是否存在到声明的语义跳转(使用semantic.el)?

emacs:是否存在到声明的语义跳转(使用semantic.el)?,c,emacs,C,Emacs,假设我正在编辑一个包含C代码的缓冲区 我从语义加载启用代码助手开始 我在函数名上加了一个点。如果我随后调用senatorjump,我可以跳转到该模块中第一次声明fn的位置。如果该模块中有一个extern声明,那么它将转到该extern语句。有时?不过,有时候它不起作用 还有语义ia快速跳转,它也跳转到第一个声明。我不确定这个fn与参议员跳跃有什么不同。但是,对于在本地缓冲区中定义的函数,这个函数实际上一直有效 如果我想跳转到的函数是一个extern呢?如果fn的定义位于单独的模块中,是否可以使用

假设我正在编辑一个包含C代码的缓冲区

我从
语义加载启用代码助手开始

我在函数名上加了一个点。如果我随后调用senatorjump
,我可以跳转到该模块中第一次声明fn的位置。如果该模块中有一个extern声明,那么它将转到该extern语句。有时?不过,有时候它不起作用

还有
语义ia快速跳转
,它也跳转到第一个声明。我不确定这个fn与参议员跳跃有什么不同。但是,对于在本地缓冲区中定义的函数,这个函数实际上一直有效

如果我想跳转到的函数是一个extern呢?如果fn的定义位于单独的模块中,是否可以使用senator跳转到fn的定义?爱德不是应该做这样的事吗


谢谢。

我还没用过参议员,但etags对你有用吗?我创建了一个包含所有
.c
的标签表。和
.h
文件使用

find . -name \*.c -o -name \*.h | xargs etags
然后使用
find tag
(默认情况下绑定为M-)并跳转到适当的定义
pop标记
(默认情况下绑定到M-*)可用于返回您的来源地


它对我来说很好,但我主要在浏览大型项目代码库时使用它,而不是在编辑C时使用它。

查看语义ia中定义的语义ia快速跳转函数。对于C&C++来说,GNU Global——GeCE-GDET生成数据库的支持也是不错的主意。
另外,我刚刚检查过——它从我的源代码跳到了/usr/include/。但我最近一直在尝试使用语义/cedet。有些功能看起来很不错。对我来说,大部分内容还是很模糊的。谢谢Alex-它在你生成数据库后跳了起来,对吗?您首先需要gtags数据库,对吗?好的,这很奇怪。我使用了
语义ia快速跳转
,对于某些函数,它在外部模块中查找fn定义。对其他人来说,情况并非如此。我没有运行ETAG或GTAG。你看到这样的东西了吗?不是你问的,而是。。。在我看来,CEDET是一个雄心勃勃的项目,但它给我的印象是非常未完成。语义上有补全和导航,参议员上有补全和导航。它们的工作原理相似,但不尽相同,而且两者似乎都不一致。嗯,外部模块是否必须在emacs会话中打开,才能找到符号?也许你不知道,我应该在语义邮件列表上问问。我在那里发了几个问题,没有得到任何回复。如果gtags/ctags数据库存在,CEDET就会使用它。如果没有,那么它将尝试解析所有相应的包含并查看它们。所有解析的数据都存储在semanticdb中,稍后在运行所有CEDET命令时使用。看起来,在你的例子中,并不是所有的头文件都被解析了-可能是包含路径有问题,或者类似的东西,这是C代码,所以。H和C模块之间不一定存在1:1的对应关系。也不需要每个.c都有一个.h。那么,语义如何确定要解析哪些c模块呢?我在文档中没有看到这一点。我可能应该到别的地方去,嗯?