这似乎是一个非常非常愚蠢的问题。 但是在过去的几年里,我一直在终端上使用vim和cscope,有些屏幕让生活变得有点可忍受。 我刚刚开始学习emacs,使用它会更令人满意。
使用emacs的问题:
每次我M-x find-c-symbol
,我都会得到一个带有大量文件的新缓冲区,但我不知道如何在确切的行号打开文件。
我google了很多,发现这打开了光标下的文件:M-x ffap
但这会在第一行打开。一些emacs专家可以帮助我吗?
由于
答案 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数据库的时间。