From Embedded System Lab of USTC | Suzhou Key Lab for Embedded System
Contents
|
概述
本文主要介绍建立于emacs各项基本功能之上的ecb(Emacs
相关工具简介
以下简要介绍编辑器Emacs,源码索引工具Exuberant
Emacs
与Vim齐名的两大开源编辑神器之一,由GNU组织维护,作者为Free Software教父RMS。相比vim,emacs大量使用辅助功能键(Ctrl,Alt,Shift)取代了vim的模式切换,对手指的灵活度要求更高(特别是小拇指!)。emacs采用其集成的各类辅助工具更为成熟,文档也更详尽,但学习曲线平缓且较长,需要在工作中不断反复练习总结,找到适合自己的高效使用习惯。其设计所用的起源于人工智能研究的Lisp语言也是一大亮点(也是难点……)。在日常应用中,emacs更适合于较大规模项目(如kvm,wireshark等)的源码阅读与编辑,而vim的轻量则更适于修改系统配置文件。
Ctags
全称Exuberant
- Used in at least 50 countries in all 7 continents (including Antarctica!)
- Supports 41 programming languages
(以上摘自ctags项目主页的简介)
ECB
这里其实应该是CEDET + ECB这个组合才对。CEDET(Collection of
使用方法
安装各工具
这几个工具在各个发行版中基本上都是软件源的成员。所以,Ubuntu就apt-get一下,Gentoo就emerge一下,Centos(或fedora)就yum一下……具体软件包名称不难查到。通常安装ecb时都会因依赖性自动把cedet装上。
配置
这里主要是配置emacs与ecb协同工作。
安装好emacs和ecb后(用软件包安装好后ecb和cedet的相关文件应已正确放入emacs的site-lisp目录,从源码安装则可能要自己动手),在 $HOME/.emacs中加入一行
(require 'ecb)
然后运行emacs,按M-x(即Alt-x),输入命令:
customize-variable
然后提示要定制哪个变量,输入:
ecb-source-path
Tips:输入这些命令时都可使用tab补全
然后进入一个简陋的图形设置界面,填入path,可Insert多个path,这些path应设为你的项目代码的根目录。完成后按exit按钮退出(或粗暴地C-x k)。
使用方式
通常会先用ctags索引一下,然后在ecb中根据tag跳来跳去的看源码。
用ctags建立索引
进入项目代码的根目录,运行
ctags -e -R
-e表示按emacs的TAGS文件格式建立索引文件,-R表示recursive。现在的ctags能够自动判断项目代码所用的编程语言,而且还挺可靠。这样在根目录就会生成一个TAGS文件,里面存放着索引信息。
进入ecb环境
启动emacs后,按M-x,输入
ecb-activate
See the magic? 左边分出了几个小窗口,左上方0号窗口里的就是刚才添加的项目路径,点选再按回车就可进入次级目录(以此类推)。1号窗口是目录内的文件列表,点选后按回车即可在右边的buffer窗口中打开该文件进行浏览编辑。2号窗口为buffer内代码的tag(包括函数名,声明变量,define常量等),点选按回车可跳转到该tag在代码中的位置(注:新版ecb未设置自动生成tag缓存,需执行C-c . r生成)。3号窗口为阅读源码文件的历史记录。
tag搜寻
Then, when you're reading code and want to see the definition(s) of a symbol:
M-. goes to the symbol definition M-0 M-. goes to the next matching definition M-* return to your starting point
One pretty annoying thing about
M-x tags-search <type your regexp> initiate a search M-, go to the next match
You can search for any regexp, not just source code symbols.
按键列表
M-x visit-tags-table <RET> TAGS-file <RET> 把 TAGS-file 档案读进 Emacs M-. TAG <RET> 寻找函数或关键字定义的源码 C-x 4 . TAG <RET> 在另一个视窗寻找函数或关键字定义 M-* 回到寻找关键字定义之前的地方 M-x tags-search <RET> REGEXP <RET> 用正规表示式搜寻函数或关键字定义 M-, 找下一个搜寻到的函数或关键字 M-/ 自动完成可能的函数或关键字 C-M-/ 列出所有函数或关键字名称的自动完成列表
小结
这个组合基本可以替代Source Insight,某些情况下性能更优