Emacs

Twitter on Emacs

本文在署名-非商业性使用-相同方式共享 3.0版权协议下发布, 转载请注明出自aifreedom.com

Twitter Logo

Update[20090603]: 由于 Twitter 撞墙, 这个 Elisp 在中国大陆暂时无法使用.

Update[20090609]: 昨天 Twitter 又神奇地穿墙了..

Twitter.com 是一家微博客网站, 你可以在上面发布短消息, 每一条消息都不能超过140个字符. 因为每条消息的内容相对博客的一篇日志要少很多, 所以它们被叫做”微博客”. 微博客现在越来越流行了, 我认为一个很重要的原因是它相对博客显得更随意. 但是一个流量很大又太随意的 Twitter Feed 是谁也不愿意 Follow 的. 说真的, 如果你不是徐静蕾, 有多少人关心你每天的早餐吃的什么, 路上是不是堵车了, 中午是不是小睡了一觉呢?

而在 CCTV 大火等突发事件中, 在 Twitter 上都已经开始广泛讨论时, 网易, 新浪等门户网站上还迟迟没有相关新闻. 这很好地显示出了 Twitter 上消息传播的即时性. 很多”正在发生”的事情, 去 Google 上搜索还不如去 Twitter 上搜索. 比如这个事. 有一个 Greasemonkey 的脚本能在搜索 Google 同时显示 Twitter 里的搜索结果, 可以在这里安装. Greasemonkey 是 Firefox 的一个扩展, 可以用脚本修改网页的内容, 还是不清楚 Greasemonkey 是什么的可以等着看我准备要写的 Firefox 扩展推荐.

回到主题, Emacs 真的不愧是一个伟大的编辑器. 你可以在我的 Blog 里找到我之前写过的关于 Emacs 的新手指南(虽然现在看起来, 它不是一份很好的入门指南), 我翻译的 Emacs 默认快捷键列表, 还有一个 Emacs 资源网站的书签列表在这里. 而今天要说的是一个让你可以在 Emacs 里收发 Twitter 消息的扩展.

Snapshot of Twitter on Emacs

这是我在查看最新的消息的截图. 这个扩展的主页在这里, 在这里可以下载到最新的代码, 现在最新的版本是 0.3.3.

把它下载后保存到一个 Emacs 能找到的地方(在这里有添加扩展的方法介绍), 然后在 .emacs 里写上配置.

  (require 'twit)
  (setq twit-show-user-images t) ;; 显示好友头像
  (setq twit-user-image-dir "~/.twit") ;; 设置头像保存路径

然后重启 Emacs, M-x twit-show-recent-tweets, 输入用户名密码后就可以看到最新的消息了. 可能在你输完以后消息没有显示出来, 按一下 g 之后等两秒就应该能看到了.

在这个 buffer 里, 有一些默认的快捷键, 比如 g 是刷新消息, a 是查看@你的消息, w 是发消息, r 是回复别人的消息, d 是给某人发 Direct Message. 常用的就这些吧.

我还在全局绑定了一些键, C-c t 是查看最新的消息, C-c w 是发消息.

(global-set-key (kbd "C-c t") 'twit-show-recent-tweets)
(global-set-key (kbd "C-c w") 'twit-post)

下面是我的 Twitter Profile 的地址, 欢迎 Follow.

https://twitter.com/aifreedom

Emacs快捷键列表

本文在署名-非商业性使用-相同方式共享 3.0版权协议下发布, 转载请注明出自aifreedom.com

C = Control
M = Meta = Alt | Esc
Del = Backspace

基本快捷键(Basic)
C-x C-f “find”文件, 即在缓冲区打开/新建一个文件
C-x C-s 保存文件
C-x C-w 使用其他文件名另存为文件
C-x C-v 关闭当前缓冲区文件并打开新文件
C-x i 在当前光标处插入文件
C-x b 新建/切换缓冲区
C-x C-b 显示缓冲区列表
C-x k 关闭当前缓冲区
C-z 挂起emacs
C-x C-c 关闭emacs

光标移动基本快捷键(Basic Movement)
C-f 后一个字符
C-b 前一个字符
C-p 上一行
C-n 下一行
M-f 后一个单词
M-b 前一个单词
C-a 行首
C-e 行尾
C-v 向下翻一页
M-v 向上翻一页
M-< 到文件开头
M-> 到文件末尾

编辑(Editint)
M-n 重复执行后一个命令n次
C-u 重复执行后一个命令4次
C-u n 重复执行后一个命令n次
C-d 删除(delete)后一个字符
M-d 删除后一个单词
Del 删除前一个字符
M-Del 删除前一个单词
C-k 移除(kill)一行

C-Space 设置开始标记 (例如标记区域)
C-@ 功能同上, 用于C-Space被操作系统拦截的情况
C-w 移除(kill)标记区域的内容
M-w 复制标记区域的内容
C-y 召回(yank)复制/移除的区域/行
M-y 召回更早的内容 (在kill缓冲区内循环)
C-x C-x 交换光标和标记

C-t 交换两个字符的位置
M-t 交换两个单词的位置
C-x C-t 交换两行的位置
M-u 使从光标位置到单词结尾处的字母变成大写
M-l 与M-u相反
M-c 使从光标位置开始的单词的首字母变为大写

重要快捷键(Important)
C-g 停止当前运行/输入的命令
C-x u 撤销前一个命令
M-x revert-buffer RETURN (照着这个输入)撤销上次存盘后所有改动
M-x recover-file RETURN 从自动存盘文件恢复
M-x recover-session RETURN 如果你编辑了几个文件, 用这个恢复

在线帮助(Online-Help)
C-h c 显示快捷键绑定的命令
C-h k 显示快捷键绑定的命令和它的作用
C-h l 显示最后100个键入的内容
C-h w 显示命令被绑定到哪些快捷键上
C-h f 显示函数的功能
C-h v 显示变量的含义和值
C-h b 显示当前缓冲区所有可用的快捷键
C-h t 打开emacs教程
C-h i 打开info阅读器
C-h C-f 显示emacs FAQ
C-h p 显示本机Elisp包的信息

搜索/替换(Seach/Replace)
C-s 向后搜索
C-r 向前搜索
C-g 回到搜索开始前的位置(如果你仍然在搜索模式中)
M-% 询问并替换(query replace)

Space或y 替换当前匹配
Del或n 不要替换当前匹配
. 仅仅替换当前匹配并退出(替换)
, 替换并暂停(按Space或y继续)
! 替换以下所有匹配
^ 回到上一个匹配位置
RETURN或q 退出替换

使用正则表达式(Regular expression)搜索/替换
可在正则表达式中使用的符号:
^ 行首
$ 行尾
. 单个字符
.* 任意多个(包括没有)字符
\< 单词开头
\> 单词结尾
[] 括号中的任意一个字符(例如[a-z]表示所有的小写字母)

M C-s RETURN 使用正则表达式向后搜索
M C-r RETURN 使用正则表达式向前搜索
C-s 增量搜索
C-s 重复增量搜索
C-r 向前增量搜索
C-r 重复向前增量搜索
M-x query-replace-regexp 使用正则表达式搜索并替换

窗口命令(Window Commands)
C-x 2 水平分割窗格
C-x 3 垂直分割窗格
C-x o 切换至其他窗格
C-x 0 关闭窗格
C-x 1 关闭除了光标所在窗格外所有窗格
C-x ^ 扩大窗格
M-x shrink-window 缩小窗格
M C-v 滚动其他窗格内容
C-x 4 f 在其他窗格中打开文件
C-x 4 0 关闭当前缓冲区和窗格
C-x 5 2 新建窗口(frame)
C-x 5 f 在新窗口中打开文件
C-x 5 o 切换至其他窗口
C-x 5 0 关闭当前窗口

书签命令(Bookmark commands)
C-x r m 在光标当前位置创建书签
C-x r b 转到书签
M-x bookmark-rename 重命名书签
M-x bookmark-delete 删除书签
M-x bookmark-save 保存书签
C-x r l 列出书签清单

d 标记等待删除
Del 取消删除标记
x 删除被标记的书签
r 重命名
s 保存列表内所有书签
f 转到当前书签指向的位置
m 标记在多窗口中打开
v 显示被标记的书签(或者光标当前位置的书签)
t 切换是否显示路径列表
w 显示当前文件路径
q 退出书签列表

M-x bookmark-write 将所有书签导出至指定文件
M-x bookmark-load 从指定文件导入书签

Shell
M-x shell 打开shell模式
C-c C-c 类似unix里的C-c(停止正在运行的程序)
C-d 删除光标后一个字符
C-c C-d 发送EOF
C-c C-z 挂起程序(unix下的C-z)
M-p 显示前一条命令
M-n 显示后一条命令

DIRectory EDitor (dired)
C-x d 打开dired
C(大写C) 复制
d 标记等待删除
D 立即删除
e或f 打开文件或目录
g 刷新当前目录
G 改变文件所属组(chgrp)
k 从屏幕上的列表里删除一行(不是真的删除)
m 用*标记
n 光标移动到下一行
o 在另一个窗格打开文件并移动光标
C-o 在另一个窗格打开文件但不移动光标
P 打印文件
q 退出dired
Q 在标记的文件中替换
R 重命名文件
u 移除标记
v 显示文件内容
x 删除有D标记的文件
Z 压缩/解压缩文件
M-Del 移除标记(默认为所有类型的标记)
~ 标记备份文件(文件名有~的文件)等待删除
# 标记自动保存文件(文件名形如#name#)等待删除
*/ 用*标记所有文件夹(用C-u */n移除标记)
= 将当前文件和标记文件(使用C-@标记而不是dired的m标记)比较
M-= 将当前文件和它的备份比较
! 对当前文件应用shell命令
M-} 移动光标至下一个用*或D标记的文件
M-{ 移动光标至上一个用*或D标记的文件
% d 使用正则表达式标记文件等待删除
% m 使用正则表达式标记文件为*
+ 新建文件夹
> 移动光标至后一个文件夹
< 移动光标至前一个文件夹
s 切换排序模式(按文件名/日期)

或许把这个命令归入这一类也很合适:
M-x speedbar 打开一个独立的目录显示窗口

Telnet
M-x telnet 打开telnet模式
C-d 删除后一个字符或发送EOF
C-c C-c 停止正在运行的程序(和unix下的C-c类似)
C-c C-d 发送EOF
C-c C-o 清除最后一个命令的输出
C-c C-z 挂起正在运行的命令
C-c C-u 移除前一行
M-p 显示前一条命令

Text
只能在text模式里使用
M-s 使当前行居中
M-S 使当前段落居中
M-x center-region 使被选中的区域居中

宏命令(Macro-commands)
C-x ( 开始定义宏
C-x ) 结束定义宏
C-x e 运行最近定义的宏
M-n C-x e 运行最近定义的宏n次
M-x name-last-kbd-macro 给最近定义的宏命名(用来保存)
M-x insert-kbd-macro 将已命名的宏保存到文件
M-x load-file 载入宏

编程(Programming)
M C-\ 自动缩进光标和标记间的区域
M-m 移动光标到行首第一个(非空格)字符
M-^ 将当前行接到上一行末尾处
M-; 添加缩进并格式化的注释
C, C++和Java模式
M-a 移动光标到声明的开始处
M-e 移动光标到声明的结尾处
M C-a 移动光标到函数的开始处
M C-e 移动光标到函数的结尾处
C-c RETURN 将光标移动到函数的开始处并标记到结尾处
C-c C-q 根据缩进风格缩进整个函数
C-c C-a 切换自动换行功能
C-c C-d 一次性删除光标后的一串空格(greedy delete)

为了实现下面的一些技术, 你需要在保存源代码的目录里运行”etags
*.c *.h *.cpp”(或者源代码的其他的扩展名)
M-.(点) 搜索标签
M-x tags-search ENTER 在所有标签里搜索(使用正则表达式)
M-,(逗号) 在tags-search里跳至下一个匹配处
M-x tags-query-replace 在设置过标签的所有文件里替换文本

GDB(调试器)
M-x gdb 在另一个的窗格中打开gdb

版本控制(Version Control)
C-x v d 显示当前目录下所有注册过的文件(show all registered files in this dir)
C-x v = 比较不同版本间的差异(show diff between versions)
C-x v u 移除上次提交之后的更改(remove all changes since last checkin)
C-x v ~ 在不同窗格中显示某个版本(show certain version in different window)
C-x v l 打印日志(print log)
C-x v i 标记文件等待添加版本控制(mark file for version control add)
C-x v h 给文件添加版本控制文件头(insert version control header into file)
C-x v r 获取命名过的快照(check out named snapshot)
C-x v s 创建命名的快照(create named snapshot)
C-x v a 创建gnu风格的更改日志(create changelog file in gnu-style)

这份列表根据http://lpn.rnbhq.org/tools/xemacs/emacs_ref.html和我的使用经验翻译整理而来. 部分内容我不是很熟悉(比如Version Control), 在给出翻译的同时附上了英文, 这部分如果有错误, 请给我指出, 谢谢. 原列表中的部分命令/快捷键已经失效, 我在整理中发现的已修正, 但仍可能存在错误, 希望您发现后能指出来, 谢谢. 我使用的Emacs的版本是GNU Emacs 23.0.60.1 of 2008-03-20, 而因各人使用的Emacs版本不同, 命令/快捷键可能存在差异, 所以希望您在指出问题时能同时附上您的Emacs版本号.

Emacs网站书签

学习使用Emacs, 最好的资料当然是Emacs Manual. 但很多人都不愿意啃这样一本大部头的英文书, 于是就有了下面这些网站.

王垠的主页 http://docs.huihoo.com/homepage/shredderyin/index.html

2003年清华的退学博士生, 曾引起全国范围的争论. 他的那篇《我的清华梦》讲述了他的经历和选择退学的理由, 推荐大家去搜索到看看. 他写的关于Linux, Emacs, LaTeX, Metapost等内容的文章, 也是很难得的好文章! 甚至还有关于滑板的内容. 值得强烈推荐!

曹乐的个人主页 http://www.caole.net/diary/index.html

这位也是清华的前辈, 也是喜欢Linux的牛人. 他的主页上有关于Emacs, Vim还有SVN的内容, 也是不错的资料.

EmacsWiki http://www.emacswiki.org/cgi-bin/wiki

关于Emacs的配置, 扩展等方方面面的技巧. 搜索功能很方便, 一些小问题都可以在这里找到解决方法.

Emacs中文站 http://www.emacs.cn

Emacs中文站的内容不是很全, 很多内容的文档都没有, 但关于dired, guns等扩展的介绍还是值得一看的.

The very unofficial dotemacs home http://www.dotemacs.de/

这个网站存储了很多人的dotEmacs文件, 你可以在里面找找看别人是怎么配置他们的Emacs的. 当然, 你也可以把你的dotEmacs文件发上去和别人共享.

Emacs中文化指南 http://man.chinaunix.net/newsoft/Emac/book.html

有些老的指南了. 在Emacs23里已经不需要像这样复杂地配置中文字体了, 在我的这篇日志里有Emacs23里中文配置的说明. 但这里的Elisp扩展的介绍还是不错的资料, 也看看吧.

这些都是别人写的资料, 如果你的问题在这里找不到答案呢? 那也可以到下面的论坛, USENET新闻组去提问. 我这里给的都是中文社区, 英文的社区没有参加过, 不是很清楚.

Ubuntu中文社区-Emacs与Vim版 http://forum.ubuntu.org.cn/viewforum.php?f=68
USENET-cn.bbs.comp.emacs http://groups.google.com/group/cn.bbs.comp.emacs/topics

cn.bbs.comp.emacs 这个组是和水木的 Emacs 版互相转信的.

Emacs入门指南[三]: 自定义配色, 使用Elisp扩展

本文在CC版权协议下发布, 转载请注明出自aifreedom.com

  1. Emacs入门指南[一]: 历史简介, 编译安装
  2. Emacs入门指南[二]: 字体美化, 窗口大小的调整
  3. Emacs入门指南[三]: 使用Elisp扩展

在这篇日志里, 我将以”color-theme”这个扩展为例, 介绍如何使用Elisp扩展, 让你的Emacs更强大.

“color-theme”能让你方便地修改Emacs的配色.

首先, 从color-theme项目的网站上找到它的下载地址, 现在最新的版本是6.6.0.

然后在你的Home里建一个文件夹(例如”elisp”), 将刚刚下载的归档解压出来. 虽然这些工作在图形界面里都能很容易地完成, 但既然这篇日志有一个”Linux”的Tag, 那就来复习一下怎样在命令行里完成这个工作吧. 这里假设你把”color-theme-6.6.0.tar.gz”文件放在了”~/download”目录里.

cd ~
mkdir elisp
cd elisp
tar -zxvf ~/download/color-theme-6.6.0.tar.gz

OK, 然后在”.emacs”里加入这样几句话. 不知道”.emacs”文件是什么? 去看这个系列的上一篇日志吧.
(add-to-list 'load-path "~/elisp")
(require 'color-theme)

第一句是将”~/elisp”这个目录加入到”load-path”变量中. “load-path”变量里记录了Emacs搜索装载文件的目录, 将”~/elisp”加入进去, Emacs才能找到我们刚刚添加的Elisp扩展文件.

第二句是调用”color-theme”扩展. 至于调用的方式, 通常在Elisp扩展的README文件里都有介绍.

重启Emacs, 在”Tools”菜单里就多出来一项”Color Themes”. 点击它, 会打开一个叫做”*Color Theme Seletion*”的Buffer. 在这里列出了很多不同风格的配色方案, 选择(用方向键或者C-p, C-n)一个配色方案, 按”i”键就可以预览配色效果. 多找找吧, 九十个配色方案里应该有你喜欢的了. 我在GTK里使用的是”Blue Mode”, 在字符界面下用的是”Aalto Light”.

选好了喜欢的配色方案, 可以回到刚才那个Buffer里, 将光标移动到你选中的那个项目上, 按”p”, 会在一个新的Buffer里打印出一段代码. 把这些代码保存到”~/.emacs-color-theme”. 还记得怎么保存文件么?

C-x C-s ~/.emacs-color-theme

下一步是去修改”.emacs”文件.

首先在”(require ‘color-theme)”前加上分号”;”将这一行注释掉.

然后在它的下面加上这样的两行

(load-file "~/.emacs-color-theme")
(my-color-theme)

之所以注释掉”(require ‘color-theme)”而仅仅只载入我们刚刚导出的文件, 是因为在启动时载入color-theme.el要比载入我们导出的文件要慢. 因此这样可以稍稍加快启动速度.

至于如何创建完全由自己定义的配色方案, 我没有研究, 因为我懒.. 不过README里有介绍, 勤快的同学自己去研究吧.

好了, 把”.emacs”文件存盘(再复习一下, C-x C-s)后重启Emacs, 看到新的配色方案了吧.

小结一下, 在Emacs里使用扩展, 首先要把存放扩展文件的路径加入”load-path”变量里, 然后要根据扩展里介绍的方法, 在”.emacs”里调用扩展(这个不一定, 如果你不需要它随Emacs启动自然就不需要添加了).

总结. 这个系列日志到此结束, 因为如果你认真读了”Emacs Tutorial”, 并认真读了我这三篇日志, 就应该能上手Emacs了. 虽然你还不能自如地配置它, 但它至少不再像个巨大的怪物一样可怕了. 这也正是我写”Emacs入门指南”和”我的Linux日记”的目的. 我希望我的日志能为初学者引路, 打开一扇通往奇妙世界的窗. 但想要真正领略其中的乐趣, 还少不了你自己的探索. 我很乐意与你分享探索未知的乐趣, 欢迎留言, 欢迎给我写信. 我的Email地址可以在About页中找到.

最后废话一句: 学好Emacs是不容易的, 是需要时间的, 但学好它能让你工作起来更顺手, 正所谓”磨刀不误砍柴功”.

Emacs入门指南[二]: 字体美化, 窗口大小的调整

本文在CC版权协议下发布, 转载请注明出自aifreedom.com

  1. Emacs入门指南[一]: 历史简介, 编译安装
  2. Emacs入门指南[二]: 字体美化, 窗口大小的调整
  3. Emacs入门指南[三]: 使用Elisp扩展

Emacs是一个高度可自定义的编辑器, 它的配置文件使用Elisp语言描述. “Elisp”是”Emacs Lisp”的缩写. 如果你还不会Elisp怎么办? 没关系, 我也还不会, 一样可以将Emacs配置得很顺手.

Emacs 的默认配置文件是”.emacs”, 也叫做”dotemacs”, 它的默认存储在Home目录中, 它的路径是系统环境变量”home”指向的文件夹. 在Linux中用符号波浪号(tilde)”~”代表”home”指向的路径, 不过在Windows中似乎没有类似的符号. 在Windows下, “.emacs”文件通常被存储在”C:\”或者”C:\Documents and Settings\[User name]\Application Data\”下. 由于Windows中以符号点(dot)”.”开头的文件名是非法的, 所以你不能在资源管理器里创建这个文件. 有时, Emacs会帮你建好这个文件, 但如果它没帮你, 你就自己用Total Commander建一个吧. 不过, 下面的字体设置我仅仅在Linux下尝试过, 不保证能在Windows下有效. 而且我觉得, 在Windows下的默认字体就不错了..

这段话写给不是很熟悉Linux的朋友. 在Linux中, 以点”.”开头的文件是默认隐藏的, 所以你可能无法从你通常浏览文件的窗口里看到”.emacs”文件. 那么就使用Emacs来打开它吧, 在Emacs里输入

C-x C-f ~/.emacs

来打开它. 看不懂这个命令? 那么你应该先看看Emacs里自带的Tutorial. 这个命令说的是: 按住Ctrl再按x, 都松开, 再按住Ctrl再按f, 都松开, 再输入”~/.emacs”.

如果你觉得你现在还无法熟练地在Emacs里编辑文件, 那么用gedit打开它吧. 但gedit里没有Elisp的语法高亮.

将下面的代码复制/粘贴到”.emacs”里, 然后重启Emacs, 你会发现中文字体变得漂亮了许多. 当然, 你得先安装”文泉驿”中文字体. 这是一个开源的免费中文字体, 这里是这个开源项目的介绍页面, 你可以在这里下载到可以方便安装的deb包. 或者, 你可以选择其他的字体.

(set-default-font "courier 10 pitch-12")
(set-fontset-font "fontset-default"
'han '("WenQuanYi Bitmap Song" . "unicode-bmp"))
(set-fontset-font "fontset-default"
'cjk-misc '("WenQuanYi Bitmap Song" . "unicode-bmp"))
(set-fontset-font "fontset-default"
'bopomofo '("WenQuanYi Bitmap Song" . "unicode-bmp"))
(set-fontset-font "fontset-default"
'gb18030 '("WenQuanYi Bitmap Song". "unicode-bmp"))
(set-fontset-font "fontset-default"
'symbol '("WenQuanYi Bitmap Song". "unicode-bmp"))
(add-to-list 'default-frame-alist '(font . "courier 10 pitch-12"))

然后, 你可能会发现起始窗口的大小发生了变化. 如果你和我一样还在使用17寸CRT显示器, 可能窗口已经超出屏幕之外了. 没关系, 在你的Home文件夹里新建一个”.Xdefault”的文件, 然后在文件中输入以下内容.

Emacs.font: courier 10 pitch-12
Emacs.geometry: 80x36+50+74

Emacs.font设置的是默认字体, 这个我们已经在”.emacs”里设置了, 但由于”.Xdefault”先于”.emacs”加载, 所以我还是在这写了一个. (这个的用途我不是很清楚, 希望有高手能指点一下.)

Emacs.geometry设置的是默认窗口的大小和位置, 格式是”WIDTHxHEIGHT+XOFF+YOFF”. “80×36″是窗口的”宽x长”, 单位分别是列和行; (XOFF, YOFF)是窗口左上角相对桌面左上角的坐标, XOFF是水平方向距离, YOFF是竖直方向距离, 单位是像素.

保存文件后在终端中输入

xrdb ~/.Xdefaults

重启Emacs就可以看到修改后的效果了.

但如果你觉得Emacs默认的配色方案不够cool, 那还是期待我的下一篇”Emacs入门指南”吧. 我会在下一篇里介绍一个Emacs插件, “color-theme”. 它自带很多种很cool的配色主题, 方便和我一样的懒人使用. 当然, 有艺术天赋的你也可以选择自己配色. 它的效果到底如何? 看看我的Emacs的截图就清楚了.

Emacs入门指南[一]: 历史简介, 编译安装

本文在署名-非商业性使用-相同方式共享 3.0版权协议下发布, 转载请注明出自aifreedom.com

  1. Emacs入门指南[一]: 历史简介, 编译安装
  2. Emacs入门指南[二]: 字体美化, 窗口大小的调整
  3. Emacs入门指南[三]: 使用Elisp扩展

Emacs是什么? 它是具有很强的扩展性的一个免费文本编辑器. 但由于它强大的扩展性, 它的功能早已超越了一个文本编辑器. Emacs在程序员中十分流行, 很多人登录系统之后就把会Emacs打开, 使用它编写代码, 收发邮件, 登录新闻组, 访问Internet, 在IRC中与其他人讨论问题, 而直到注销登出的时候才会将Emacs关掉. 一个著名的UNIX笑话是这样说的, “如果Emacs环境里有一个好的编辑器的话, 它就不至于这么糟糕了.” 而如果你对Emacs和Vim稍有了解, 你就能看懂下面的这幅漫画. (点击这里可以链接到创作这个系列漫画的作者的网站. 这个作者创作了一系列Geek主题的漫画, 等我全部看完了再另写一篇日志作详细介绍.)


Copyright (c) 2007 Laurent Gregoire

Emacs已经有超过三十年的开发历史, 它的开发始于MIT AI Lab, 最初只是一组TECO的宏包. 后来由Richard Stallman开发的GNU Emacs成为了最流行的Emacs版本, 我们平时说到的Emacs也是指的GNU Emacs. 它的源码和扩展都是使用GPL授权的, 这意味着你可以自由地测试, 更改, 重新分发它的源码. 你可以从Wikipedia上获取更多关于Emacs的历史, 特性, 和使用介绍. 现在, 你可以在Linux, Unix, Windwos, Mac OS, 甚至某些PDA上使用Emacs. GNU Emacs的主页是http://www.gnu.org/software/emacs/, 最新发布的稳定版本是Emacs 22.2.

这是我在Emacs中使用gdb调试C++程序的截图, 如果对这个强大的编辑器感兴趣的话请继续看下面的安装步骤.

如果你在使用Ubuntu或者其他基于Debian的Linux发行版, 你可以使用

sudo apt-get install emacs

来安装源中最新的稳定版Emacs版本(通常是Emacs22.1, 因为22.2是3月26日刚刚发布的, 很多源还没有更新). RH, 或者FC我很久没用了, yum的命令记不请怎么用的了.. 所以这里只写Debian的安装方法了.

但由于Emacs23对Unicode和xft的支持, 使得在Emacs 23中配置中文环境更加方便. 但因为Emacs23是仍处在开发中的版本, 可能在某些情况下不稳定, 但我用了一段时间发现并没有太大的问题, 而新版本的功能(Unicode的支持)是我很需要的, 所以我选择使用Emacs23, 也推荐大家都使用Emacs23. 我的这个系列文章的配置说明都是针对Emacs23写的.

如果你仅仅是个普通的软件使用者, 并不想自己下载源码并编译安装Emacs, 你可以在将下面的源的地址(请按照自己的操作系统的版本, 选择对应的源)加入”sources.list”文件. 添加的方法在我的这篇日志里有说明.

Ubuntu 6.10 “Edgy Eft”
deb http://ppa.launchpad.net/avassalotti/ubuntu edgy main
deb-src http://ppa.launchpad.net/avassalotti/ubuntu edgy main

Ubuntu 7.04 “Feisty Fawn”
deb http://ppa.launchpad.net/avassalotti/ubuntu feisty main
deb-src http://ppa.launchpad.net/avassalotti/ubuntu feisty main

Ubuntu 7.10 “Gutsy Gibbon”
deb http://ppa.launchpad.net/avassalotti/ubuntu gutsy main
deb-src http://ppa.launchpad.net/avassalotti/ubuntu gutsy main

在更新软件包列表(sudo apt-get update)后, 在终端里使用

sudo apt-get install emacs-snapshot

来安装新版的Emacs. 在下载安装完成之后, 你就能在菜单里找到Emacs了, 运行它试试看吧! 你可以在菜单里找到”Help->Emacs Tutorial”, 在这篇简短的教程里, 你可以学习到Emacs最基本的操作方法. 可能你会发现它的字体看起来有些不舒服, 那就请期待着这个系列的下一篇日志吧. 不过我需要提醒你的是, Emacs不是那么容易上手的. 刚开始使用的时候你会觉得什么都用不顺手, 但你一旦熟悉了它的操作并最终成为使用Emacs的高手, 你就会发现它是如此地好用, 以至于你真的把它当成是操作系统, 而不仅仅是一个文本编辑器. 而到那时, 你也就能明白上面那则Unix笑话是什么意思了.

但如果你有Geek的精神, 想获得最新的Emacs的源码并自己编译, 那么请按照我下面说的步骤做吧.

首先安装cvs和ssh

sudo apt-get install cvs ssh

然后用cvs从GNU的服务器上下载最新的Emacs源码.

export CVS_RSH="ssh"
cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/cvsroot/emacs co emacs

如果网速比较慢的话(我应该算是的..), 这个下载的过程会持续半个小时以上.

在用cvs下载的同时, 你可以去配置编译环境. 具体需要哪些包我记不太清了, 照我这样的应该没什么问题了吧.

sudo apt-get install build-essential
sudo apt-get build-dep emacs-snapshot

然后等Emacs的源码下载完毕后, 执行以下命令编译安装.

cd ~/emacs
./configure -enable-font-backend --with-xft --with-freetype --with-x-toolkit

如果这一步没有出现Error, 那就基本上没有问题了, 可以继续编译了. 否则请根据屏幕的提示安装相应的软件包.

make bootstrap
make info
sudo make install

然后你可以输入emacs来体验一下自己编译安装的Emacs了! 当然, 你也可以从菜单里找到Emacs启动.

在起始页面里就有”Emacs Tutorial”的链接, 我强烈建议你先看看这个熟悉Emacs最基本的操作, 再去考虑如何定制更强大的Emacs. 这个Emacs的指南已经被翻译成中文版, 应该不存在阅读上的障碍. 因此在下一篇日志中, 我将默认我的读者都是认真读过这篇”Emacs Tutorial”的, 直接介绍如何自定义Emacs的字体和语法高亮的颜色.