【问题标题】:Open cscope results in the same buffer打开 cscope 导致相同的缓冲区
【发布时间】:2014-02-05 03:27:16
【问题描述】:

这似乎是一个非常愚蠢的问题。 但是在过去的几年里,我一直在终端上使用 vim 和 cscope,用一些屏幕来让生活变得更容易忍受。 刚开始学emacs,用起来满足很多。

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

谢谢

【问题讨论】:

  • 我无法重现该问题。例如,当我使用 cscope-find-this-symbol 时,我会得到一个带有文件 list 的新缓冲区,我只需单击它或按 RET 就可以了。您可以尝试在新缓冲区中激活 M-x 编译外壳次要模式,这应该使链接«可点击»。
  • 您能否发布与 cscope 相关的 .emacs 文件的内容?我可能遗漏了什么
  • 我什么都没有!我遵循了这些说明:wikemacs.org/index.php/… 我不时调用一个 cscope 函数,正如我在上面告诉你的那样。使用 Emacs24。顺便说一句,我找不到函数 find-c-symbol 。它来自哪里?
  • 你好@Ehvince 如果有帮助,我正在使用 gnu emacs。我们的一位团队成员已将 xemacs 选项放入 gnu emacs 中。由于我仍在学习,您能否建议一种方法我可以绑定组合键以在给定的行打开文件。
  • 这应该是自动的。你在使用 Emacs24.3 吗?

标签: emacs cscope


【解决方案1】:

我已经安装了 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 数据库的时间)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2013-02-17
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多