Emacs 教程初步

Emacs 教程初步
Emacs 教程初步

Emacs教程初步

——轮子

注:

1.本文内容大都来自网络,我只时进行了分类编辑,版权属于原作者。(公司内部使用,不要外传)

2.如果你是第一次使用Emacs,可能感觉非常别扭,但不用担心,当你能够熟练使用一些基本操作后,你会喜欢上它的。

1.Emacs是什么

Emacs是一种强大的文本编辑器,在程序员和其他以技术为主的计算机用户中广受欢迎。Emacs,即Editor Macros(编辑器宏)的缩写,最初由Richard Stallman(理查德·马修·斯托曼)于1975年在MIT协同Guy Steele共同完成。这一创意的灵感来源于TECMAC和TMACS,它们是由Guy Steele、Dave Moon、Richard Greenblatt、Charles Frankston等人编写的宏文本编辑器。自诞生以来,Emacs演化出了众多分支,其中使用最广泛的两种分别是:1984年由Richard Stallman发起并由他维护至今的GNU Emacs,以及1991年发起的XEmacs。XEmacs 是GNU Emacs的分支,至今仍保持着相当的兼容性。它们都使用了Emacs Lisp这种有着极强扩展性的编程语言,从而实现了包括编程、编译乃至网络浏览等等功能的扩展。

在Unix文化里,Emacs是黑客们关于编辑器优劣之争的两大主角之一,它的对手是vi。

2. Emacs的安装和配置

2.1 安装

1)源码安装:从https://www.360docs.net/doc/9a15626451.html,/pub/gnu/emacs/下载源码安装

2)在Ubuntu上用sudo apt-get install emacs安装

2.2 配置

在~/目录下有个隐藏的.emacs文件(如果没有,可以自己创建一个),这个就是Emacs 的配置文件。

Emacs在启动的时候会读.emacs文件,根据里面的配置设置启动后的状态。

配置文件的内容要用elisp语言编写。在这里你可以设置自己的颜色主题,字体,快捷键,以及一些Emacs模式(如emacs wiki)的配置等等。

网上有很多人贴出自己的配置,一般来说可以拷贝他们的配置到自己的.emacs文件中,然后再根据自己的喜好进行改动定制配置文件。

下面列出某.emacs文件中的一小部分作为示例:

(setq user-full-name "Hans Joanphan")

(setq user-mail-address "joanphan@https://www.360docs.net/doc/9a15626451.html,")

;;设置你的书签文件,默认是~/.emacs.bmk,我喜欢把有关emacs的文件尽量放在一个文件夹,所以就修改了。

(setq bookmark-default-file "~/.emacs.d/.emacs.bmk")

;;设置缩略词的文件?不大记得了

(setq abbrev-file-name "~/.emacs.d/.abbrev_defs")

;;load-path就同bash中的$PATH相似,emacs所需要的Elisp包都得在load-path里的文件夹中,~/.emacs.d/elisp是我自己添加的Elisp包

(setq load-path (cons "~/.emacs.d/elisp" load-path))

;;设置info的路径,也可通过Shell的全局变量$INFOPATH设置

(add-to-list 'Info-default-directory-list "~/local/info/")

;;由菜单修改配置的东西将会保存在custom-file里,这里我设置他在我的elisp的集中营里(setq custom-file "~/.emacs.d/elisp/hvj-custom.el")

;;设置gnus启动的文件。默认是为~/.gnus.el

(setq gnus-init-file "~/.emacs.d/elisp/hvj-gnus.el")

(set-cursor-color "white")

;; 鼠标颜色设置为白色

(set-mouse-color "white")

;; 设置背景颜色和字体颜色

(set-foreground-color "white")

(set-background-color "darkblue")

从下面这个网址可以找到很多的设置

https://www.360docs.net/doc/9a15626451.html,/bbs/showthread.php?s=&threadid=112349

3. Emacs的基本操作

Emacs的基本操作推荐参考Emacs自带的Tutorial,有中文版的,非常全面,在学习的同时可以按照提示在Emacs实际操作。

下面是从网上载的,原文地址:

https://www.360docs.net/doc/9a15626451.html,/bookfiles/132/1001324456.shtml

3.1启动Emacs

安装完Emacs之后,只需在命令行键入“emacs [文件名]”(若缺省文件名,也可在emacs 编辑文件后另存时指定),也可从“编程”→“emacs”打开,如3.5图中所示的就是从“编程”→“emacs”打开的Emacs欢迎界面。

图3.5 Emacs欢迎界面

接着可单击任意键进入Emacs的工作窗口,如图3.6所示。从图中可见,Emacs的工作窗口分为上下两个部分,上部为编辑窗口,底部为命令显示窗口,用户执行功能键的功能都会在底部有相应的显示,有时也需要用户在底部窗口输入相应的命令,如查找字符串等。

图3.6 Emacs的工作窗口

3.2基本操作

在进入Emacs后,即可进行文件的编辑。由于Emacs只有一种编辑模式,因此用户无需进行模式间的切换。下面介绍Emacs中基本编辑功能键。

下文操作中的C表示CTL键,M表示ALT键。

(1)移动光标

虽然在Emacs中可以使用“上”、“下”、“左”、“右”方向键来移动单个字符,但笔者还是建议读者学习其对应功能键,因为它们不仅能在所有类型的终端上工作,而且读者将会发现在熟练使用之后,输入这些Ctrl加字符会比按方向键快很多。下表3.3列举了Emacs 中光标移动的常见功能键。

表3.3 Emacs光标移动功能键

目录目录内容目录目录内容

C-f 向前移动一个字符 M-b

向后移动一个单词C-b 向后移动一个字符 C-a

移动到行首

C-p 移动到上一行 C-e

移动到行尾

C-n 移动到下一行

M-<(M加

“小于号”)

移动光标到整个文本的开头

M-f 向前移动一个单词

M->(M加

“大于号”)

移动光标到整个文本的末尾

(2)剪切和粘贴

在Emacs中可以使用“Delete”和“BackSpace”删除光标前后的字符,这和用户之前的习惯一致,在此就不赘述。下表3.4列出了以词和行为单位的剪切和粘贴功能键:

表3.4 Emacs剪切和粘贴

目录目录内容目录目录内容

M-Delete 剪切光标前面的单词 M-k

剪切从光标位置到句尾的内容

M-d 剪切光标前面的单词

C-y

将缓冲区中的内容粘贴到光标所在

的位置

C-k 剪切从光标位置到行尾的内容

C-x u

撤销操作(先操作C-x,接着再单

击u)

注意在Emacs中对单个字符的操作是“删除”,而对词和句的操作是“剪切”,即保存在缓冲区中,以备后面的“粘贴”所用。

(3)复制文本

在Emacs中的复制文本包括两步:选择复制区域和粘贴文本。

选择复制区域的方法是:首先在复制起始点(A)按下“C-Spase”或“C-@(C-Shift-2)”使它成为一个表示点,再将光标移至复制结束电(B),再按下“M-w”,就可将A与B之间

的文本复制到系统的缓冲区中。在使用功能键C-y将其粘贴到指定位置。(4)查找文本

查找文本的功能键如表3.5所示:

表3.5 Emacs查找文本功能键

目录目录内容

C-s 查找光标以后的内容,并在对话框的“I-search:”后输入查找字符串

C-r 查找光标以前的内容,并在对话框的“I-search backward:”后输入查找字符串

(5)保存文档

在Emacs中保存文档的功能键为“C-x C-s”(即先操作C-x,接着再操作C-s),这时,屏幕底下的对话框会出现如“Wrote /root/workplace/editor/why”字样,如图3.7所示。

图3.7 Emacs中保存文档

另外,Emacs在编辑时会为每个文件提供“自动保存(auto save)”的机制,而且自动保存的文件的文件名前后都有一个“#”,例如,编辑名为“hello.c”的文件,其自动保存的文件的文件名就叫“#hello.c#”。当用户正常的保存了文件后,Emacs就会删除这个自动保存的文件。这个机制当系统发生异常时非常有用。

(6)退出文档

在Emacs中退出文档的功能键为“C-x C-c”。

4. Emacs的模式

这里所说的“模式”,是指Emacs里的各种辅助环境。

本节内容源自:https://www.360docs.net/doc/9a15626451.html,/mylxiaoyi/archive/2006/02/25/609065.aspx Emacs的模式有着不同的行为和特征,我们可以选择将这些行为和特征打开或是关闭

(当然或是自定义),这样我们就可以在不同的环境下来使用.所谓的模式就是可以使一个文本编辑器(Emacs)可以书写文档,可以用不同的语言(C,C++,Perl,Python,Java或是更多的语言)来编写程序,创建主页,发送E-Mail,阅读新闻组新闻,记录我们的日程,甚至可以玩游戏.

Emacs的模式只是简单的Lisp库,这些库可以进行扩展和修改.

4.1主要模式和次要模式

在Emacs中有两个基本的模式类型:主要模式(Major)和次要模式(Minor).他们的区别在我们将他们打开或是关闭来工作一段时间之前并不是一件容易的事情.但是在这里我们也要简单的介绍一下.

只有一个主要模式可以在任何时刻激活.许多的次要模式可以在任何时刻激活.主要模式的目标是某一种语言或是特殊的任务,而次要模式则要小得多并且也不是特定的实用程序而是可以完成许多的任务.听起来似乎有一些抽象,下面我们来举一个例子.当我们在编写纯文本文件时我们会常用到一个名为text-mode的模式.这个模式被设计成为用来书写类似于README文件的自由格式文档.这个模式可以知道如何来标记单词和段落以及可以确保当我们按下常规的按键时像我们所期待的一样来进行处理.

当我们要书写人们消费的文档时,我们总是希望这个文件看上去可以好看一些.他应该在合适的地方进行文本的换行.要允许文本换行我们可以打开auto-fill次要模式.这种模式会在我们输入很长的句子并且到了一行的结尾时会试着做出正确的处理.这是一个次要模式也就意味着他可以与几种不同的主要模式进行协作.但是刚才我们所提到的当到达一行的结尾时所做出的正确的处理在text-mode和在java-mode下是不同的.我们并不希望我们的java代码会像英文文本一样进行换行.但是我们却在我们的java代码中的注释块会进行换行.auto-fill模式可以来处理这一切.

各种不同的Emacs模式的作者已经做了大量的工作来保证事情以次要模式的方式来进行工作.

如果我们看一下Emacs的屏幕素描,我们就会发现模式行已经标示出了Emacs所在的模式.在当时的情况下他是处在默认的Lisp交互模式下.只有我们要书写Lisp代码时我们才会体会到他的用处.(但是因为Emacs的大部分是用Lisp写成的,那么为什么不呢?)

4.2程序模式

首先也是最重要的,Emacs是由程序员为程序员而设计的.对于我们可以想到的所有的流行的程序语言都可以得到高质量的模式(甚至是一些并不流行的程序语言也是这样).在这里我们只是简单的介绍其中的一些.

大多数的程序模式有着共同的特征.通常情况下他会达到下面的一些或是所有:

为程序语言提供语法加亮

为程序语言提供自动缩进和代码格式化

提供内容帮助

自动与调试工具交互

在菜单栏加入特殊的菜单

另外还有一些并不是语言所特有的模式可以帮助我们完成许多程序语言中所共同的编程任务.例如版本控制界面,在我们的代码中自动加入注释,创建Makefile文件,更新日志等. 当我们将所有这些模式放在一起来考虑Emacs代码的成熟度和稳定性时,与市场上一些商业化的集成开发环境(IDE)相比,例如C++或是Java的开发工具,也是相当优秀的.而且Emacs是可以自由得到的.

因为C,C++和Java的语法是相类似的,所以在Emacs中有一个模式可以同时处理这三种语言(同时也可以处理Object-C和IDL).这是一个非常成熟和完整的包而且包含在Emacs的发行版本之中.这个模式被叫作cc-mode或是CC模式.

为了得到更详细的信息或是下载新的版本,我们可以访问下面的网站:

https://www.360docs.net/doc/9a15626451.html,/emacs

Perl

在Emacs中可以有两种模式来编辑Perl代码.第一种被叫作perl-mode(正如我们所期望的)而第二种被称之为cperl-mode.我们并不是十分的清楚为什么会有两种模

式,但是可以看出perl-mode是在Emacs中编辑Perl代码的原始模式.似乎比起

cperl-mode有着更少的特征而且也不可以识别一些Perl的语言构思.

Python

Python(另一个比较流行的脚本语言)也有一个可以获得的Emacs模式.似乎是到目录为止,他并不是随GNU Emacs发行而随XEmacs发行的.然而在这两种模式下他都可以很好的来进行工作.

其他还有许多其他的编辑模式来帮助程序员.这些模式可以完成下面的一些事情:

Shell脚本(Bash,sh,ksh,csh...)

Awk,Sed,Tcl,...

Makefile

更新日志

文档

调试

4.3编写

有趣的Emacs模式不仅限于我们上面列出的用来书写代码的一些模式.书写文档的人们也可以从Emacs的模式中获益.

拼写检查(ispell 模式)

许多文档类型的作者要不时的进行拼写检查.如果我们已经安装了GNU ispell,我们就可以输入M-x ispell来对当前缓冲区进行拼写检查.如果他检查到了他所不认识的单词,他就会提示我们并会列出一个可以用来替换的列表来供我们进行选择.他的功能就相当于非常流行的非自由软件包的拼写检查.

HTML(html-helper 模式)

如查我们发现我们要不时的写一些HTML文件,我们可以试一下html-helper-mode.

正如他的名字所展示的,这种模式可以为手工编写HTML代码的人提供许多的帮助.

TeX(tex-mode)

如果我们要用TeX来编写文档,要Emacs加入颜色并高亮显示反斜线(\),花括号以及其他的一些字符是相当有帮助的.tex-mode可以小心为我们处理这些事情.

SGML(sgml-mode)sgml-mode提供了SGML文档的基本内容:确认,高亮显示,前向标记,后向标记以及更多的内容.他是Emacs的标准部分.

4.4其他模式

当然还有许多其他的可以使得生活简单的模式.下面是一些流行模式的例子:

版本控制(vc模式)

vc模式与大多数流行版本控制(RCS,SCCS,CVS)可以简单的完成文件的储入与读取,管理发行版本等.他是Emacs的标准的部分并且在Emacs的文档中进行了说明.

Shell模式

为什么要切换到另一个X 窗口或是虚拟控制端仅为了执行几个Shell命令呢?在Emacs中来完成这样的工作并且省去我们的麻烦:-)

M-x shell将会在Emacs的缓冲区中装入一个shell.我们可以在这个缓冲区中完成大多数的我们在shell提示符下完成的工作,因为Emacs在屏幕下是与我们真正的Shell进行交互.这也是Emacs中的标准部分,我们也可以在Emacs的文档中查看到相关的内容.

Telnet和FTP

为什么要切换到另一个X窗口或是虚拟终端来运行telnet或是ftp呢?在Emacs中来完成这样的工作并会省去我们的麻烦.

就像是在Emacs中运行Shell一样,我们也可以运行telnet和ftp.输入M-x telnet或是M-x ftp来亲自的进行试验.

Man

为什么要切换到另一个X窗口或是虚拟终端仅是为了读一个手册页呢?我们可以在Emacs中完成这样的工作并省去我们的麻烦.就像在Emacs中运行Shell一样,我们可以读一个手册页.我们可以输入M-x man来亲自的试验一下.

Ange-FTP

引用ange-ftp文档中的一段话:这个软件包试着在GNU Emacs中尽量简单和透明的使用FTP来访问文件和目录.处理普通文件的子集扩展到与FTP进行交互.

这就意味着我们可以处理我们本地机子上的文件一样来处理远程机子上的文件.所以如果我们需要编辑一个不同机子上的文件,只是告诉Emacs来打开他(使用一个稍微不同的路径语法),Emacs会很好的处理登陆信息并取回信息.然后当我们用C-x C-s来保存文件时,ange-ftp会将这样的保存写回远程主机.

这个稍微不同的路径语法如下面的形式.一个名为myfile的文件,在user目录下,在一个名为https://www.360docs.net/doc/9a15626451.html,的主机上,这样我们就可以打开(C-x f)文件:

/user@https://www.360docs.net/doc/9a15626451.html,:~user/myfile

这也是Emacs发行版本的标准部分,我们可以在Emacs文档中查找到相应的内容.

5. Emacs颜色主题

本节内容来自:https://www.360docs.net/doc/9a15626451.html,/wiki/EmacsColorTheme.html

这就是 color-theme.el 带给 Emacs 的效果,很漂亮吧!Emacs 本身就具有极高 的可定制性,但是自己定义颜色的工作却有点过于繁琐我无聊,为此,已经有 hacker 为我们提供了一个现成的 color-theme 扩展包,里面有很多漂亮的颜色 主题,上面的图片中显示的就是其中的几个。下面我们开始安装 color-theme 包 吧!

首先下载 color-theme.el 1,然后把它放在你的加载路径里面,最后在你的 ~/.emacs 里面加上 (require 'color-theme)就可以使用了。现在重新启动一 下 Emacs ,然后就可以用 M-x color-theme-select来选择你喜欢的颜色主题 了,它会打开一个列表,在每个列表项目上回车会应用那个颜色主题,如果选上 了某个主题,按一下 d,会出现类似:

color-theme-sitaramv-nt is an interactive compiled Lisp function in

`color-theme.el'.

(color-theme-sitaramv-nt)

Black foreground on white background.

Includes faces for font-lock, widget, custom, speedbar.

[back]

的东西,其中那句 (color-theme-sitaramv-nt)加入到你的 ~/.emacs里面去, 就可以永久应用这个颜色主题了。

color-theme目前的网址为:https://www.360docs.net/doc/9a15626451.html,/color-theme/

大家可以从这个网址下载color-theme.el文件。

6.在Emacs下用C/C++编程

本节内容源于:https://www.360docs.net/doc/9a15626451.html,/diary/emacs_write_cpp.html

6.1版权说明和参考文献

按照惯例,我写的文章在最开始处放版权说明和参考文献。

6.2参考文献

?hhuu @ newsmth 的《Emacs的日常生活》

?emacs 的文档

?emacs 相关插件的文档

6.3版权说明:

转载请注明转自曹乐的个人主页 https://www.360docs.net/doc/9a15626451.html,,请保证全文转载,尤其不可省略这一部分。

6.4序

用emacs写程序也有5个年头了,深切地体会到Emacs的强大。程序员有三种,一种是用

vi的,一种是用emacs的,还有一种是其他。或许有些夸张,但也颇能体现出emacs在程序员中的地位。

emacs最大的问题在于入门门槛较高。它看起来和多数人想象中的IDE相差甚远,很多人看到emacs的第一眼就觉得它是个记事本(还是个非常难用的记事本),稍微好些的往往觉得emacs也就是个ultraEditor而已,真是暴殄天物了。

我是个懒人,不喜欢记太多的快捷键,相信很多人和我一样。所以从我后面的叙述可以看出来,除了常用的命令都是快捷键外,其他命令多数都是用M-x执行或者用鼠标点菜单。这仅仅是个人风格问题,先说明一下。

我的基本编程环境是:

?Debian GNU/Linux sid 操作系统

?Gnome 2.10.0 桌面环境

?GUN Emacs 23.0.0.1 for debian

?使用 Gnu tool chains(gcc,make,gdb等等)

后面的叙述都基于上述环境。另外,本文主要针对C/C++程序开发,对其他语言有些也适用,从难度上说,本文主要针对入门者。

本文肯定会有很多错误,请指正,谢谢。

6.5基本流程

写C++程序基本上是这么几个步骤:

1.编辑代码

2.编写Makefile

3.编译代码,修改编译错误

4.调试代码,修改逻辑错误

当然,往往还需要阅读别人的代码。

根据上述步骤,本文主要针对以下几个方面:

?配置Emacs,建立便利的代码编辑环境和Makefile编写环境。

?在Emacs中编译代码,并修改编译错误。

?在Emacs中配合GDB调试程序。

?利用cscope和ecb在emacs中阅读代码。

6.6基本环境设置

6.6.1编辑环境配置

要写C++程序,当然要用到cc-mode插件。CC-Mode原本是支持C语言的,但现在也能支持很多语言,比如 C++,Java,Objective-C,CORBA,AWK,Pike等等。CC-Mode是gnu-emacs的标准插件。如果您要求不高,那么默 认的配置或许就能满足。CC-Mode的各种行为都可以自由地定制,您可以参考这里的文档:CC-Mode参考文档

这里是我的.emacs文件中关于CC-Mode配置的部分,仅供参考:

;;;; CC-mode配置 https://www.360docs.net/doc/9a15626451.html,/

(require 'cc-mode)

(c-set-offset 'inline-open 0)

(c-set-offset 'friend '-)

(c-set-offset 'substatement-open 0)

;;;;我的C/C++语言编辑策略

(defun my-c-mode-common-hook()

(setq tab-width 4 indent-tabs-mode nil)

;;; hungry-delete and auto-newline

(c-toggle-auto-hungry-state 1)

;;按键定义

(define-key c-mode-base-map [(control \`)] 'hs-toggle-hiding)

(define-key c-mode-base-map [(return)] 'newline-and-indent)

(define-key c-mode-base-map [(f7)] 'compile)

(define-key c-mode-base-map [(meta \`)] 'c-indent-command)

;; (define-key c-mode-base-map [(tab)] 'hippie-expand)

(define-key c-mode-base-map [(tab)] 'my-indent-or-complete)

(define-key c-mode-base-map [(meta ?/)] 'semantic-ia-complete-symbol-menu) 注意一下,上面最后两行是代码自动补齐的快捷键。后面我会提到代码自动补齐。

;;预处理设置

(setq c-macro-shrink-window-flag t)

(setq c-macro-preprocessor "cpp")

(setq c-macro-cppflags " ")

(setq c-macro-prompt-flag t)

(setq hs-minor-mode t)

(setq abbrev-mode t)

)

(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

;;;;我的C++语言编辑策略

(defun my-c++-mode-hook()

(setq tab-width 4 indent-tabs-mode nil)

(c-set-style "stroustrup")

;; (define-key c++-mode-map [f3] 'replace-regexp)

)

6.6.2自动补齐

自动补齐通常用的都是hippie-expand,我也用了很长时间。不过有时候会觉得这个自动补齐“傻”了一点,常会补齐出一些毫不相干的东西,因为hippie-expand是根据你敲过的词和kill-ring等进行判断的,并不对程序语法进行分析。

所以你还需要安装一个代码分析工具,然后把它加进hippie-expand的扩展策略里去。我们可以用semantic。实际上,hippie-expand+semantic是我所发现的最好的选择了,如果您有更好的,请您也告诉我一声:)

Semantic是CEDET中的一个工具,CEDET是Collection of Emacs Development Environment Tools的缩写,它包含了好几个工具,都挺不错的。可惜我只会用其中两个。

您可以在.emacs中对Semantic进行配置,下面是我的.emacs相关的配置,仅供参考:

导入cedet:

(load-file "~/lib/emacs-lisp/cedet-1.0pre3/common/cedet.el")

配置Semantic的检索范围:

(setq semanticdb-project-roots

(list

(expand-file-name "/")))

自定义自动补齐命令,这部分是抄hhuu的,如果在单词中间就补齐,否则就是tab。

(defun my-indent-or-complete ()

(interactive)

(if (looking-at "\\>")

(hippie-expand nil)

(indent-for-tab-command))

)

(global-set-key [(control tab)] 'my-indent-or-complete)

hippie的自动补齐策略,优先调用了senator的分析结果:

(autoload 'senator-try-expand-semantic "senator")

(setq hippie-expand-try-functions-list

'(

senator-try-expand-semantic

try-expand-dabbrev

try-expand-dabbrev-visible

try-expand-dabbrev-all-buffers

try-expand-dabbrev-from-kill

try-expand-list

try-expand-list-all-buffers

try-expand-line

try-expand-line-all-buffers

try-complete-file-name-partially

try-complete-file-name

try-expand-whole-kill

)

)

注意一下我前面CC-Mode配置中有这么两行:

(define-key c-mode-base-map [(tab)] 'my-indent-or-complete)

(define-key c-mode-base-map [(meta ?/)] 'semantic-ia-complete-symbol-menu) 这样,我们在CC-Mode中就可以调用自定义的hippie补全了,快捷键是Tab。

另外,我还把快捷键“Alt + / ”绑定到了semantic-ia-complete-symbol-menu命令上,这是semantic的命令,它会根据分析结果弹出补齐的菜单,效果如图显示:

CEDET中还有一个不错的工具是speedbar,你可以用它在多个文件中快速切换。在我

的.emacs配置文件里,我把speedbar关联到了F5上:

(global-set-key [(f5)] 'speedbar)

这样用F5就可以调出speedbar,效果如下:

不过说实话,我自己很少用到speedbar,我通常都是用dired配合bookmark使用:) 6.7编译和调试程序

按上面的配置,写完程序和Makefile文件后,在Emacs源代码窗口中按F7就可以进行编译。因为在my-c-mode-common-hook()函数里,有这么一行:

(define-key c-mode-base-map [(f7)] 'compile)

默认情况下,emacs的compile命令是调用make -k,我把它改成了make。你也可以把它改成其他的,比如gcc之类的。改下面的“make”就行了。

'(compile-command "make")

Emacs会划分一个窗格显示编译的消息,在编译结束后,emacs会自动将编译器的输出和程序关联起来,告诉你第几行的程序有问题。直接在出错的行号上按Enter,就可以跳转到相应文件的相应行。其实我通常都是用鼠标中键去点出错行号:)

搞定了编译错误后,接着要和逻辑错误斗争了。其实对简单的程序来说,把中间结果打印到终端是最简单好用的调试办法:)不过稍微复杂点的程序就会晕菜了,这时我们就需要拿gdb 跟踪程序流程了。

你用下面的命令就可以启动gdb了。

M-x gdb

通常我喜欢进入gdb-many-windows模式,这样就会把一个Frame划分为5个窗格,同时显示:gdb命令窗口,当前局部变量,程序文本,调用栈和断点。

gdb的命令就不在这里说了,它的文档几乎到处都是。emacs把gdb的命令和快捷键做了绑定,对于常用的命令,还是输入快捷键比较方便。比如,C-c C-n是Next line,C-c C-s 是step in,其实用的最多的快捷键也就是这两个。

下面是我的gdb效果图:

6.8阅读代码

在emacs下读代码通常有三种工具,最简单的是etags,最复杂的是ecb(emacs code browser),位于中间的是cscope。

etags和ctags一样,只不过前者是用于emacs的,后者是用于vi的。我个人觉得etags 功能稍稍显得不够用一点,当然,也可能是我用的不好:) 欢迎大牛指导。

使用tags之前要先对源代码分析建立tags文件,在代码所在目录中运行:etags -R 即可。

我常用的就这几个命令和快捷键:

M-x visit-tags-table FILE 选择tags文件

M-. [TAG] 访问标签

M-* 返回

C-u M-. 寻找标签的下一个定义

ecb据说功能强大,但是太复杂了,我懒得折腾它。谁搞定了教教我吧:) 下面是一张ecb 的效果图。

cscope是我感觉比较合适的一个工具。它其实是一个独立的软件,完全可以脱离vi和emacs 使用。但是结合emacs的强大功能,cscope就显 得更加方便了。GNU Emacs默认自带cscope 的支持。在使用之前,cscope也需要对代码进行索引。在emacs中可以这样做:

C-c s a 设定初始化的目录,一般是你代码的根目录

C-s s I 对目录中的相关文件建立列表并进行索引

建完索引之后,你就可以用cscope在代码里游荡了。常用的一些命令如下:

C-c s s 序找符号

C-c s g 寻找全局的定义

C-c s c 看看指定函数被哪些函数所调用

C-c s C 看看指定函数调用了哪些函数

C-c s e 寻找正则表达式

C-c s f 寻找文件

C-c s i 看看指定的文件被哪些文件include

上面这些快捷键其实我自己也常常记不全,没关系,抬头看看上面的菜单栏,有一栏就是Cscope,这些命令里头都有:)

贴一个cscope的效果图吧:

写完了。希望这篇文章对您能有一些用处。有问题或建议可以和我联系。

7. Emacs的其他功能

Emacs不仅仅是一个编辑器,他是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中,在基于编辑器的功能基础上,Emacs自行开发了一个“bourne-shell-like”的shell: EShell。Emacs还可以:

收发电子邮件

通过FTP/TRAMP编辑远程档案

通过Telnet登录主机

上新闻组

登陆IRC和朋友交流

查看日历

撰写文章大纲

对多种编程语言的编辑

调试程序,结合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等

玩游戏

计算器

记日记

煮咖啡

管理日程,Task,ToDo,约会等

个人信息管理

目录管理

文件比较

阅读info和man文档

浏览网站

为各种程序(TeX等)提供统一的操作界面

这些功能怎么用?我基本也没用过:(大家自己去挖掘吧,呵呵。8. Emacs相关资源

官方网站:https://www.360docs.net/doc/9a15626451.html,/software/emacs/

Emacs中文站:https://www.360docs.net/doc/9a15626451.html,/

某Blog:https://www.360docs.net/doc/9a15626451.html,/schumyxp/archive/2008/04/10/2278268.aspx Emacs配置: https://www.360docs.net/doc/9a15626451.html,/bbs/showthread.php?s=&threadid=112349常用操作:https://www.360docs.net/doc/9a15626451.html,/diary/emacs.html

颜色主题:https://www.360docs.net/doc/9a15626451.html,/color-theme/

目录

1.导言

{GNU 是什麽

{GNU Emacs 是什麽

{GNU EMACS 的特质

2.Emacs 的线上辅助说明

{Emacs 的基本知识

{Emacs 的自学教材

{Ctrl-h 的用法

{Emacs 的 info 使用说明

3.Emacs 的整合环境

{如何在 Emacs 中执行 Shell 的指令

{有关目录的编辑方法

{如何编辑远方机器上的档案

{程式的编辑,编译与测试

{如何在 Emacs 中列印文件

{在 Emacs 中如何收发信件

{其它与 Emacs 相关的工作环境

4.与 Emacs 有关的议题

{如何起动 Emacs

{如何离开 Emacs

{EMACS 的萤幕安排

{Emacs 的缓冲区与视窗

5.Emacs 的基本编辑指令

{如何载入档案与储存档案

{Emacs 的基础编辑指令

{何谓 Yanking

{如何在文件中做上标记

{文件的移动与拷贝

{何谓 Undo

6.Emacs 进阶编辑指令

{文件的搜寻

{文件的取代

{Regular Expression

7.Emacs 的其它相关事项

{Registers and Bookmarks

{文字的勘误

{图形的编辑

8.中文编辑环境

{Emacs 下的中文编辑

{中文化的 EMACS - Mule

9.结论

相关主题
相关文档
最新文档