给力的文本编辑器——emacs

来源:互联网 发布:什么是数据库存储过程 编辑:程序博客网 时间:2024/05/29 09:01
【转】 Emacs,ctags,ecb

From Embedded System Lab of USTC | Suzhou Key Lab forEmbedded System

Contents

  • 1 概述
  • 2 相关工具简介
    • 2.1 Emacs
    • 2.2 Ctags
    • 2.3 ECB
  • 3 使用方法
    • 3.1 安装各工具
    • 3.2 配置
    • 3.3 使用方式
      • 3.3.1 用ctags建立索引
      • 3.3.2 进入ecb环境
      • 3.3.3 tag搜寻
  • 4 小结

概述

本文主要介绍建立于emacs各项基本功能之上的ecb(Emacs CodeBrowser)环境的简单使用情景,以及ctags与emacs协同工作的基本方法,结合个人使用经验,探讨一种完全依靠开源软件进行高效源码阅读修改的工作方式。

相关工具简介

以下简要介绍编辑器Emacs,源码索引工具Exuberant Ctags,基于emacs的源码浏览编辑环境ECB

Emacs

与Vim齐名的两大开源编辑神器之一,由GNU组织维护,作者为FreeSoftware教父RMS。相比vim,emacs大量使用辅助功能键(Ctrl,Alt,Shift)取代了vim的模式切换,对手指的灵活度要求更高(特别是小拇指!)。emacs采用其集成的各类辅助工具更为成熟,文档也更详尽,但学习曲线平缓且较长,需要在工作中不断反复练习总结,找到适合自己的高效使用习惯。其设计所用的起源于人工智能研究的Lisp语言也是一大亮点(也是难点……)。在日常应用中,emacs更适合于较大规模项目(如kvm,wireshark等)的源码阅读与编辑,而vim的轻量则更适于修改系统配置文件。

Ctags

全称Exuberant Ctags,以区别于历史上计算机前辈们所开发的其它ctags实现,平时还是简称ctags。如今基本是ctags发展的mainstream了,因为其它的实现版本要么没人维护,要么功能缺乏,无法与Exuberant Ctags比肩,不过统一集中力量发展也是好事。其特点:

  1. Used in at least 50 countries in all 7 continents (includingAntarctica!)
  2. Supports 41 programming languages

(以上摘自ctags项目主页的简介)

ECB

这里其实应该是CEDET + ECB这个组合才对。CEDET(Collectionof Emacs Development EnvironmentTools)集成了几个实现现代编辑器先进功能的emacs>辅助组件,项目的最终目标是把emacs武装成不逊色于VS、Eclipse等IDE的高级编辑环境(实际上是想组成一个强大的开源IDE)。ECB则是利用CEDET提供的功能实现的一套加强代码浏览功能的组件。

使用方法

安装各工具

这几个工具在各个发行版中基本上都是软件源的成员。所以,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-xk)。

使用方式

通常会先用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 thingabout ctags is that it onlyindexes declarations and definitions of symbols, not invocations.Fortunately emacs has a built-inworkaround for this, called "tags-search". This is basically a grepthat looks through all the source files mentioned in your TAGSfile. It's fast, so you can pretty quickly zip through all thematches in your codebase:

   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,某些情况下性能更优

Retrieved from "http://embedded.ustcsz.edu.cn/wiki/index.php/Emacs,ctags,ecb"

原创粉丝点击