在Linux下我通常习惯用ESS(Emacs Speaks Statistics)来编辑R代码,利用ESS的各种键组合,可以大大提高写代码的效率。但是我之前一直苦恼于写C/C++时可利用的键组合太少了,效率很低。今天从一位计算机专业的童鞋那里找到了一样非常极品的东西——Cscope.
Cscope 是C语言的浏览工具,通过这个工具可以很方便地找到某个函数或变量的定义位置、被调用的位置等信息。它提供了多种编辑器的支持:Vi, Emacs等。我在这里介绍的就是Emacs下的cscope接口。
安装方法很简单,在Ubuntu下,直接在终端键入sudo apt-get install cscope cscope-el,当然前提是你已安装过Emacs了。然后打开.emacs文件,在里面添加(require 'xcscope)即可。(话说当年我死活找不到.emacs文件在哪里,我猜应该也有一些童鞋有过这样的疑问吧。一般.emacs文件就在用户目录下(终端cd回车),如果没有,自己新建一个即可。)
要在Emacs里使用cscope的第一件事就是生成cscope数据库。如果你的代码结构很简单,都集中在一个文件夹里,那么这一步可以省略,直接打开要编辑的文件,使用cscope快捷键即可,emacs会自动调用一个叫做cscope-indexer的bash文件生成cscope数据库。但是当程序的结构比较复杂时,比如代码分散在多个文件夹里并且文件夹相互嵌套,我们需要手动生成cscope数据库。方法很简单,在程序根目录下键入cscope-indexer -r即可。
这里列出了一些常用的快捷键:
- 浏览代码文件时可以的快捷键:
 C-c s sFind symbol.
 C-c s dFind global definition.
 C-c s gFind global definition (alternate binding).
 C-c s GFind global definition without prompting.
 C-c s cFind functions calling a function.
 C-c s CFind called functions (list functions called from a function).
 C-c s tFind text string.
 C-c s eFind egrep pattern.
 C-c s fFind a file.
 C-c s iFind files #including a file.
- 在cscope结果中切换文件时的快捷键:
 C-c s nNext symbol.
 C-c s NNext file.
 C-c s pPrevious symbol.
 C-c s PPrevious file.
- 返回初始状态的快捷键:C-c s u
无图无真相,最后给个截图。该图正在使用C-c s s查找movies_t字符串。在下面窗口的cscope buffer中用p或n键可以上下移动光标,同时主窗口(上面的窗口)中的箭头(=>)也会随着移动。Enjoy it!

参考文献: