将Emacs打造成阅读源代码的神器_emacs c++代码浏览插件-程序员宅基地

技术标签: 代码  阅读  源代码  emacs  mac  

原文地址为: 将Emacs打造成阅读源代码的神器

Start

Emacs是一个功能相对较多而且很复杂的text­editor,所以想要熟练使用必须要对emacs的一些基本概念进行了解,了解这些概念最好的教程就是emacs自带的 “Emacs Tutorial“。可以通过点击菜单栏的Help->Emacs Tutorial(choose language)进行学习。

将Emacs打造成舒适的代码阅读器

要想将Emacs打造成舒适的代码阅读环境除了需要Emacs本体之外,还需要几种插 件来帮助我们实现这个愿望。Emacs是一种扩展性很强的编辑器,并且定义了一种 elisp语言来专门配置Emacs并开发新的功能。我们为将emacs打造成代码阅读器所 需要的插件主要有 CEDET,ECB以及CSCOPE,下面分别介绍一下这几个插件的作用。

CEDET

cedet是一堆完全用elisp实现的emacs工具的集合。包含了很多的功能,这个插件 的主要目的是为Emacs提供基础功能的支持以使其变成变成类似Eclipse或VS系列 这样的高级开发环境。

ECB

ECB是“Emacs Code Browser”的简称,从其名字就可以看出这个插件的作用是将 Emacs变成一
个代码浏览器。使用了ECB之后的效果可见下图。
ecb

CSCOPE

Cscope 是一款开源免费的 C/C++浏览工具,自带一个基于文本的用户界面,通过 cscope可以很方便地找到某个函数或变量的定义位置、被调用的位置等信息。 Cscope对 C /C++支持较好,也可以自己定制来支持Java和Perl、Python等脚本语 言。所以CSCOPE是一个为代码浏览提供基础功能的程序,这个程序并不是为了 Emacs而专门开发的,因此要想在Emacs上使用这个程序需要在Emacs中安装插件调 用CSCOPE提供的功能。

安装

接下来介绍这些插件的安装过程,首先CEDET的支持是直接包含在emacs中的并不 需要额外安装,因此我们只要安装ECB和CSCOPE就可以了。在介绍具体的安装过程 之前先介绍下emacs的插件配置过程。

Emacs的插件配置

简单地说Emacs的插件配置主要有以下两步,第一步是将插件文件拷贝到emacs的 插件文件夹(默认是~文件夹下的.emacs.d/)中,第二部是在emacs的配置文件 (~下的.emacs)中描述这个插件的路径loadpath)并启用插件。

ECB的安装

https://github.com/alexott/ecb 下载ecb的tar文件,解压后将解压出来的文件 拷贝到.emacs.d中并编辑emacs配置文件加入以下代码。注意将文件的位置改成自 己的位置。

;;将ECB的路径添加到读取列表中
(add­to­list 'load­path "/home/augustus/.emacs.d/ecb­master")
;;告诉emacs启用ecb
(require 'ecb)

保存emacs配置文件并重新启动emacs就可以在菜单栏的Tools­>Start Code Browser打开ecb了。

CSCOPE的安装

首先要在系统上安装CSCOPE

sudo apt­get install cscope

然后去CSCOPE的官网http://cscope.sourceforge.net/ 下载源码包,并将其中的 xcscope.el拷贝到
loadpath包含的目录里。并在.emacs里面加上

;;告诉emacs启用cscope
(require 'xcscope)

至此,用emacs来阅读c/c++源代码所需要的工具包都安装好了,当然用emacs来写代码调试代码都是很方便的,也有很多相关的插件,但这已不在本文的范围之内了。

CSCOPE使用方法

下面我们用bitvisor的源代码为例展示一下用这套工具阅读源码的强大之处。首先我们用配置好的emacs打开vtmain.c文件,然后在菜单栏里选择Tools­>Start Code Browser(ECB)来开启ECB,也可以使用M­x ‘ecb­activate来开启ecb。并且可以看到菜单栏里出现了CSCOPE的菜单,下面我就来一一介绍下CSCOPE提供的 这些功能都有什么作用。

建立索引

首先CSCOPE对源码进行分析时需要对要分析的源码建立一个索引,否则就没办法 提供诸如代码跳转之类的功能。通过在菜单栏选择Cscope­>Cscope Database­>Set Initial Dictionary设置代码的初始目录,然后再选择create list of files to index 并选择一个目录,这样cscope就会对该目录下的所有源 代码建立索引,也就意味着在你选择的这个目录范围之内的所有源代码都可以在你阅读和分析的时候进行变量函数等内容的跳转。

功能介绍

Find Symbol

我们以Find Symbol这个指令为例介绍下CSCOPE的使用,其他的指令和这个指令的 功能是类似的。如文字意思所述,这个指令提供的功能是在源代码中搜索一个 Symbol,这个Symbol可以理解为变量,函数名称,类名等有意义的符号。通过选 中想要查找的内容然后选择这个指令就可以在所有源码中搜索选中的这个符号了。 然后就会看到下图的内容

function

CSCOPE给出了所有包含这个Symbol的文件list, 只要点击鼠标中键就可以查看对应的那行代码了。当你看完代码想要回到跳转之前的那段代码只要选择Cscope菜单里的pop mark功能就好了。类似的功能有Find globaldefinition no prompting, Find text String, Find egrep pattern, Find a file等,都可以通过名字来判断功能,使用方法上和Find Symbol是一样 的。当然如果完全用鼠标选择这些功能的话效率是非常低下的,所以我们需要快 捷键来提高我们的工作效率, Emacs本身为这些功能定义好了一组快捷键,但是使 用起来一点都不方便,以Find Symbol为例他的快捷键是’C­c s s’,也就是说要按下Control+C 再按 s s才能完成这一功能,所以我们要改造Cscope的快捷键。

自定义快捷键

在emacs里自定义快捷键是一件十分方便和快捷的事情,只要打开.emacs文件进行 设置就可以了,这里我给出一段.emacs中设置快捷键的代码

;;将find­this­file功能绑定到Ctrl+F4上
(define­key global­map [(control f4)] 'cscope­find­this­file)
;;将find­this­symbol功能绑定到Ctrl+F5上
(define­key global­map [(control f5)] 'cscope­find­this­symbol)
(define­key global­map [(control f6)] 'cscope­find­this­text­string)
(define­key global­map [(control f7)] 'cscope­find­global­definition­no­prompting)
(define­key global­map [(control f8)] 'cscope­pop­mark)
(define­key global­map [(control f9)] 'cscope­prev­symbol)
(define­key global­map [(control f10)] 'cscope­next­symbol)
(define­key global­map [(control f11)] 'cscope­prev­file)
(define­key global­map [(control f12)] 'cscope­next­file)

这样通过一番调试和适应之后就能很快的学会Emacs看源代码啦!


转载请注明本文地址: 将Emacs打造成阅读源代码的神器
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kkwant/article/details/80845080

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

推荐文章

热门文章

相关标签