在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 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. - 在
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. - 返回初始状态的快捷键:
C-c s u
无图无真相,最后给个截图。该图正在使用C-c s s
查找movies_t
字符串。在下面窗口的cscope buffer
中用p
或n
键可以上下移动光标,同时主窗口(上面的窗口)中的箭头(=>
)也会随着移动。Enjoy it!
参考文献: