打开cscope会产生相同的缓冲区

时间:2014-02-05 03:27:17

标签: emacs cscope

这似乎是一个非常非常愚蠢的问题。 但是在过去的几年里,我一直在终端上使用vim和cscope,有些屏幕让生活变得有点可忍受。 我刚刚开始学习emacs,使用它会更令人满意。

使用emacs的问题: 每次我M-x find-c-symbol,我都会得到一个带有大量文件的新缓冲区,但我不知道如何在确切的行号打开文件。 我google了很多,发现这打开了光标下的文件:M-x ffap 但这会在第一行打开。一些emacs专家可以帮助我吗?

由于

1 个答案:

答案 0 :(得分:0)

我安装了Emacs 23.x和24.x,都安装了工作cscope和xcscope安装。它们都没有“find-c-symbol”功能,但是有一个“cscope-find-this-symbol”,这是我假设你实际使用的。

我将假设您使用的是GUI版本,而不是纯文本版本,并且您实际上正在自动打开和创建*cscope*缓冲区(因为它听起来就是这样)比如你的描述)。

对于简单搜索,我会得到如下结果:

Finding symbol: debug

Database directory: /home/user/emacs_tags/modular/
-------------------------------------------------------------------------------
*** /home/user/code/modular/frontend/common/controller.test/src/MainTest.cpp:
<global>[73]                   #ifdef debug
-------------------------------------------------------------------------------

Database directory: /home/user/emacs_tags/rrsdk/
-------------------------------------------------------------------------------
*** /home/user/code/rrsdk/fs/apps/busybox/src/shell/ash.c:
<global>[303]                  #define debug optlist[15 + ENABLE_ASH_BASH_COMPAT]

*** /home/user/code/rrsdk/bootloader/u-boot/src/board/mcc200/auto_update.c:
<global>[53]                   #undef debug
<global>[55]                   #define debug(fmt,args...) printf (fmt ,##args)
<global>[57]                   #define debug(fmt,args...)
-------------------------------------------------------------------------------

Search complete.  Search time = 22.44 seconds.

假设您的结果看起来相似(它们应该),结果中有两个多个目标区域。每个文件行(以***开头的行)是该文件开头的目标。每个单独的结果也是目标区域。如果单击列出特定匹配项的其中一行(或将光标放在其上并按Enter键),它将尝试跳转到与结果匹配的特定行。如果它没有正确跳转到特定行,通常意味着自上次生成cscope索引文件以来您的代码已更改。

我不确定你是如何使用cscope工具的,但你可以设置xcscope对每次更改进行自动索引以使文件保持最新,但它实际上只适用于较小的代码库,你可以保留顶级目录中的cscope.out文件,并为要索引的文件提供完整的文件列表。大多数人在外部脚本中手动使用cscope工具,偶尔手动索引/重新索引,然后使用emacs工具与现有的cscope数据库接口(我的大约需要4个)为包含Linux内核作为子部分的项目生成cscope数据库的时间。