1 Ebrowse说明

 Ebrowse是一款类似cscope的工具,但是它只能专用于C++代码.Emacs可以使用它浏览C++中的类继承信息.  Ebrowse其实分为两个部分,一个部分是Emacs自带的ebrowse(windows中为ebrowse.exe)命令,该命令可以在shell中运行.另一部分则为Emacs编辑器中的ebrowse相关Lisp程序.  在使用Ebrowse前,需要使用ebrowse命令对源代码进行预处理生成数据库,随后Emacs才能通过读取数据库的内容来显示/操作源代码中的类,成员,全局函数,宏,类型等..

2 ebrowse命令

 使用ebrowse命令生成源代码数据库的方式很简单,只需要执行`ebrowse 源代码文件名`即可. 当然ebrowse命令也提供了许多命令选项.使用选项`–help`来显示帮助信息

选项说明
–file=$file以$file中包含的内容作为待解析的文件列表,每行表示一个文件名
–search=$paths为输入文件定义搜索路径,其中$paths根据操作系统的不同使用冒号或分号分隔不同路径
–output-file=$file定义输出数据库的文件名
–append不清除数据库文件的原始内容
–no-structs-or-unions不记录struct和union的信息
–no-regexps不记录正则表达式信息,这些正则信息有利于Emacs的Ebrowse相关命令来查找函数,变量等信息
–verbose/–very-verbose显示处理源代码过程的详细信息

3 Tree-buffers

 使用C-x C-f打开ebrowse命令生成的文件时,会自动进入Tree-buffer,在其中提供了如下一些操作

3.1 操作

命令说明
/查找类名
n继续上一次查找
q退出
L v显示成员变量
L V显示静态成员变量
L d显示友函数
L f显示成员函数
L F显示静态成员函数
L t显示类型类表
T f切换显示类所对应的文件名
s显示当前行的文件名,如果加了数字参数,则显示第N行的文件名
-折叠树
+展开树
*展开所有的折叠
C-k移除当前行及其子类
C-x C-s / C-x C-w保存编辑过的类树
x显示类树的统计信息
M t給当前类加/去除Mark
M a去除所有类的Mark
C-u M a給所有类添加Mark
SPC查看当前class
RET定位到当前class

4 Member-buffers

 存在6中不同的member-buffers,分别用来表示

  • Instance variables

  • Instance functions

  • Static variables

  • Static member functions

  • Friend functions

  • Types

4.1 操作

命令说明
L n显示下一个member列表
L p显示上一个member列表
L v显示成员变量
L V显示静态成员变量
L d显示友函数
L f显示成员函数
L F显示静态成员函数
L t显示类型类表
RET定位到当前member的定义处
f定位到当前member的声明处
SPC查看当前member的定义
v查看当前member的声明
D b显示/不显示继承来的member
D a是否显示member属性
D l是否显示详细信息(长模式),短模式只显示member名,长模式显示member名和匹配member的正则表达式
G v查找指定的member
G m查找指定的member,与上一个命令不同点在于补全的范围更大了
G n继续上一次的查找
F 系列命令Filter
F a u是否显示public member
F a o是否显示protected member
F a i是否显示private member
F v是否显示virtual member
F i是否显示inline member
F c是否显示const member
F p是否显示pure virtual member
F r删除所有filter
C 系列命令显示其他的Class内容
C c切换到指定的class的member-buffer
C b切换到基类(base)的member-buffer
C d切换到子类(derived)的member-buffer
C p显示同一继承层次中的前一个class的member-buffer
C n显示同一继承层次中的后一个class的member-buffer
q退出
C-l刷新显示
?显示mode帮助

4.2 member属性说明

  属性列表从左至右说明为:

  • T         member是template

  • C         member声明为extern "C"

  • v         member声明为virtual

  • i         member声明为inline

  • c         member是const的

  • 0         member是纯虚函数

  • m         member声明为mutable

  • e         member声明为explicit

  • t         member声明了throw list

5 查询tag

 ebrowse也提供了一些类似find-tag这样的命令,你可以在C++源代码buffer中执行如下一些命令.

5.1 操作

命令说明
C-c C-m f定位到当前member的定义处
C-c C-m F定位到当前member的声明出
C-c C-m v查看当前member的定义
C-c C-m V查询当前member的声明
C-c C-m 4/5 f/F/v/V类似上面的命令,但是在另一个窗口/frame中显示
C-c C-m -定位到上一个跳转点
C-c C-m +定位到下一个跳转点
C-c C-m p显示跳转列表,在列表上可以按SPC来定位,按v来查看位置
C-c C-m s在文件集合中执行正则表达式查询
C-c C-m u查询调用当前member的地方
C-c C-m %在文件集合中执行正则表达式替换
C-c C-m ,上面3个操作当找到第一个匹配条件时会停止,该命令重启上面的查询
C-c C-m n跟上面的命令类似,重启上一次的匹配操作,担从文件集和中的下一个文件开始匹配
C-c C-m l显示指定文件中的所有member
C-c C-m a显示所有符合给定正则表达式的member
C-c C-m <TAB>自动补全当前符号
C-c C-m m显示包含光标所在member的member-buffer