C++ in Emacs

23 September 2011

Linux下我通常习惯用ESS(Emacs Speaks Statistics)来编辑R代码,利用ESS的各种键组合,可以大大提高写代码的效率。但是我之前一直苦恼于写C/C++时可利用的键组合太少了,效率很低。今天从一位计算机专业的童鞋那里找到了一样非常极品的东西——Cscope.

CscopeC语言的浏览工具,通过这个工具可以很方便地找到某个函数或变量的定义位置、被调用的位置等信息。它提供了多种编辑器的支持: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-indexerbash文件生成cscope数据库。但是当程序的结构比较复杂时,比如代码分散在多个文件夹里并且文件夹相互嵌套,我们需要手动生成cscope数据库。方法很简单,在程序根目录下键入cscope-indexer -r即可。

这里列出了一些常用的快捷键:

  1. 浏览代码文件时可以的快捷键:
    C-c s s Find symbol.
    C-c s d Find global definition.
    C-c s g Find global definition (alternate binding).
    C-c s G Find global definition without prompting.
    C-c s c Find functions calling a function.
    C-c s C Find called functions (list functions called from a function).
    C-c s t Find text string.
    C-c s e Find egrep pattern.
    C-c s f Find a file.
    C-c s i Find files #including a file.
  2. cscope结果中切换文件时的快捷键:
    C-c s n Next symbol.
    C-c s N Next file.
    C-c s p Previous symbol.
    C-c s P Previous file.
  3. 返回初始状态的快捷键:C-c s u

无图无真相,最后给个截图。该图正在使用C-c s s查找movies_t字符串。在下面窗口的cscope buffer中用pn键可以上下移动光标,同时主窗口(上面的窗口)中的箭头(=>)也会随着移动。Enjoy it!

cscope

参考文献:

  1. http://mytechrants.wordpress.com/tag/cscope/
  2. http://www.emacswiki.org/emacs/CScopeAndEmacs
  3. http://techtooltip.wordpress.com/2012/01/06/how-to-integrate-emacs-cscope-to-browse-linux-kernel-source-code/
blog comments powered by Disqus