有关Emacs的一些思考

Vim、Emacs配置和使用
davyzhu
帖子: 109
注册时间: 2009-12-06 21:23
送出感谢: 0
接收感谢: 0

有关Emacs的一些思考

#1

帖子 davyzhu » 2009-12-08 11:07

#+TITLE: 有关Emacs的一些思考
作者:三点

在下文中,C-x意为Ctrl-x,M-x意为Alt-x,以此类推。
RMS为Gnu教父Richard Stallman。Emacs指Gnu Emacs。Vi泛指Vim/vi。

* STARTED 我的Emacs私房菜(向鸟哥的Linux私房菜致敬)
** 几个疑问?
*** Emacs用户为什么没有Vi多?
这个问题来源于现实,大多数*nix平台上的用户都会选择用Vi。拿我自己来说
吧,我在用Emacs之前有3年的Vi经验,这期间也尝试用过Emacs,但都没有坚持
下来。

在这里,有必要回忆一下多年前不怎么美好的Emacs初体验。首先是保存文件,C-x
C-s,比Vi的:w繁琐。接着是没有看到tab,这个在Vim里都有了。这两个简单的判
断直接判了Emacs死刑。

直到2年前,偶然看到一位同事在用Emacs的dired。幸运的是,那位同事是传教
士型的用户,他极力向我推荐用Emacs。用他的话讲,“Vi是单项冠军,Emacs是
十项全能”。从这个意义上讲,比较Vi和Emacs就像比较刘翔和中国乒乓球队一
样,既不公正,也没有意义。或者说,Vi更符合Gnu的Kiss原则。

从那时起,我开始花时间熟悉Emacs。一开始是在家里的Windows XP上。我发现我
在Emacs上花的时间远比Vi上的时间多(我在Vi上只学了十几个指令就开始干活
了,并且没有大改过配置文件),但在Emacs上,我甚至为自己写了上千行的文档
还不过瘾。

Emacs的老用户对它有个爱称“怪兽”,而其他Editor的用户也借此嘲笑他身躯庞
大,功能繁多,外加启动贼慢。过去,Vi用户嘲笑Emacs用户,“你还在等Emacs
load,我已经把程序都调完了”,现在轮到Emacs用户嘲笑Eclipse用户了,呵呵。
在我的机器上,Emacs启动要load十几个mode,还有四五十个文件/文件夹,大概
只要不到5秒时间。Emacs占用的内存一般只有20MB左右。所以,时间和速度都不
是问题了。

我想,其他Editor的用户也不是不想让自己的Editor成为“怪兽”,只是没有能力
罢了。在设计Emacs初期,RMS在速度和扩展上选择了后者。在扩展语言(Elisp)方
面,Emacs远远超出同时代的Editor,所以才有了org-mode,gnus,dired,vc等
等。其他Editor的用户(比如我)也是基于这个原因转投Emacs。

对于Emacs用户来说,Windows/Linux/Mac都不是问题,因为Emacs本身就是个
OS,当我把家里的机器重装成Ubuntu,也没有什么磨合过程,因为除了用
Firefox/pdf reader,大量的时间都是和Emacs一起度过的。

回到原来的问题“Emacs用户为什么没有Vi多”。我想既有历史的原因,也有实际
的考虑。

先讲讲历史。十年前,正是Emacs的内战胶着期,以Zawinski为首的Hacker不再认
同RMS的开源策略,认为RMS老古董,落伍了。所以他们从Emacs 19开始分化成另
一个版本,XEmacs。不可否认,XEmacs对Emacs的进化有积极意义,带来更多的
新feature,但XEmacs的不稳定是出了名的,一天crash个几次都有可能。所以
Emacs的用户有两个选择,新潮但不稳定的XEmacs,陈旧但稳定的Emacs。而此
时vi也在进步,且始终稳定,这就使得新手在选择Emacs和Vi上逐渐倾斜Vi。

转瞬十年,尘埃落定。XEmacs几乎放弃更新,而Emacs继续向着23挺进。S. Yegge
也为它写了悼词,“XEmacs is dead, long live XEmacs”,呼吁Emacs用户重新
团结在GNU周围。经过这次折腾,Emacs元气大伤。

再看看现实。首先,我们都知道,大多数人干的活上是维护,也就是读代码或者
修改代码,而不是开发新程序。所以,如果我只要改一个文件,当然不需要开
Emacs,在terminal打开vi,瞬间修改保存,多好:)。这就是我用vi的情景。

其次,Emacs的key-binding一直是用户诟病的话题,比如我上面举的C-x C-s。无
节制的采用Ctrl最终让RMS患上肌肉功能疾病。现在Emacs上的key-binding其实是
RMS在MIT时的产物,到现在已经有三四十年了,他和他的同事们把自己随意定
义的key-binding放在一起(RMS定义key-binding的能力如果和他写程序的能力一样
强,那有多好),和谐了一把,就是我们现在看到的样子了。RMS老了,他已经不
想再在这上面作改动,他的手也不允许他编程了。但我们还年轻,既要用
Emacs,又要保护自己吃饭的本钱-双手。这就是为什么我以后要提到的“Lee
Xah's ErgoEmacs”和S. Yegge的“换ctrl和caps lock”。

最后,Emacs的培训比Vi要更难些,更花时间。作为vi用户,我知道,大多数人在
“裸vi”(没有特别配置过的vi)上工作的很好。但是Emacs用户却对配置乐此不疲
(不知道有多少人用裸Emacs)。我认识的一个小伙子光配置文件就分十几个文件,
上万行代码。这一点,vi用户很难理解。“不就是个editor吗”,有必要花这么多
时间在上面吗?用过Emacs,我才知道,其实Emacs用户喜欢的是Elisp环境,而不
是vi意义上的editor。

如果让我用一句话来表达对Emacs的感情(我在用Vi的时候好像没有这种感情,呵
呵),那就是"Use it, love it"。还有,希望在我的有生之年不要生RMS一样的
病。

*** TODO tab/dialog/toolbar的迷思-Emacs很土?

** WAITING 学习道路
学Emacs要比Vi难一些,甚至可以说,和学一个新的OS一样难。我大致估计了一
下,从入门到在潜意识层面运用Emacs(也就是不加思索地用它),大概花了我3
个月时间,和我学习Linux系统/指令的时间大致相当。

这期间,我几乎把能找到的有关Emacs的书都读了...呵呵,实际上只有3本。其
中第一本是大家都知道的动物书,另两本都是讲elisp的,"Elisp intro"和
"Elisp extension"。

但是,真正影响我的却是Steve Yegge blog,特别是他的"Effective
Emacs",Lee Xah的ErgoEmacs mode和org-mode网站上的tutorial。当然,还有
RMS写的info Emacs(这个文档不是给初学者看的)。

我的经验是要看到Emacs的优点和弱点,充分享受优点,学习如何克服弱点(书上
主要是对Emacs歌功颂德)。

** STARTED Emacs的key-binding与保护自己的手
Yegge和Xah可以说是我的Emacs导师(只是看过他俩的文章)。他俩的文章有共
同的特点,又臭又长且个人风格极强,呵呵,在这点上我也有向他俩靠拢的趋势。

Yegge和Xah用Emacs都超过10年,对它的优劣了如指掌。他们提到Emacs的一个巨
大缺点就是“伤手”(过度用Ctrl小指)。如果有人上过钢琴课就知道,老师一上来
先教小琴童“放松”,比如“甩手大法”。对于钢琴家,如果手弹废了,和变成白痴
没有区别。但是计算机课从来都没有提到这些,专家们对我们的职业病视而不见。

*** S. Yegge's blog:换ctrl和caps lock
如果你在用C-c, C-f, C-x的时候感觉手腕别扭,那就考虑一下Yegge的建议吧。
Yegge的建议(他把这个建议放在Effective Emacs最前面,可见其重要性)是换
左ctrl和caps lock(一些Unix机器上本身就这样安排)。原因是这样ctrl在中间
行,和其他键组合起来不会太吃力。我从一开始就采用他建议,大概用了2周时间
适应,现在用C-f,感觉舒服多了^-^,不用再把手腕扭来扭去。

*** STARTED Xah的ErgoEmacs
Xah则提出了更进一步的方案。一句话,尽量用Alt(大拇指)代替Ctrl(小拇指)。

** STARTED org-mode/artist-mode/spell-check
某vi支持者说:我恨Emacs,我用它只为org-mode。org-mode是北欧的一个计算机
教授在业余时间写的(看看人家的教授),开始时是为了弥补outline-mode的不
足。Emacs上的大多数应用是为程序员准备的,而不搞it的人也能用org-mode。

*** TODO org-table

** TODO dired/ibuffer/ido
如何切换文件

** TODO re/re-isearch/re-replace/rebuilder
re(regular expression)

** TODO compile/grep/gcc/gdb/make
compile在做什么?

** TODO vc/git
version control

** TODO others: calculator, shell/term, proced, rectangular

** Emacs的未来(23.1发布以后对Emacs新当家人的采访)
http://www.douban.com/group/topic/8356844/
(哎,那时候在国内还能看blogspot的copy,现在...)
其中的大当家Chong Yidong也许是中国人,物理博士后。二当家是一位计算机教
授。
要点:
1. 这两位当家人都是保守派人士,现有的key-binding和default customize基本不会修改。
2. CEDET有望在23.2时归入Emacs发布包。
3.新当家人希望release cycle缩短。Emacs有120名代码贡献者。

(草草完成,尚不完整。待续,先列提纲,等有时间补上)
上次由 davyzhu 在 2009-12-14 16:03,总共编辑 3 次。
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星
送出感谢: 1 次
接收感谢: 0

Re: 有关Emacs的一些思考

#2

帖子 xhy » 2009-12-08 11:16

看newsmth.org,EMACS版人气比Vim更旺,所以现在很难说哪个用户更多。

vi功能有限,vim自身的脚本不强,但vim也支持python/perl/ruby/tcl脚本,
可以很方便的使用那些脚本扩展vim的功能,所以elisp的优势不复存在。

其实很多时间我们都在阅读代码,vim的hjkl比emacs两键操作更加方便。
目前负债150多万
头像
dreamcast_sh
帖子: 480
注册时间: 2009-06-14 22:16
送出感谢: 0
接收感谢: 0

Re: 有关Emacs的一些思考

#3

帖子 dreamcast_sh » 2009-12-08 11:17

:)
想玩生化了。。。
davyzhu
帖子: 109
注册时间: 2009-12-06 21:23
送出感谢: 0
接收感谢: 0

Re: 有关Emacs的一些思考

#4

帖子 davyzhu » 2009-12-08 11:26

xhy兄,

Readers' Choice Awards 2009里提到vi用户占四成左右,而emacs只能属于others,呵呵。
还有,我周围的同学,同事,朋友,大约有八成用vi,粗略估计。

http://www.linuxjournal.com/article/10451
Favorite Text Editor

vi (36%)

Honorable Mention

gedit (19%)

Kate (11%)

The more things change, the more they stay the same in the Favorite Text Editor category. Vi wins again with a solid 36%, with gedit and Kate taking Honorable Mention honors. Emacs and nano also are popular but just missed the cut.
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星
送出感谢: 1 次
接收感谢: 0

Re: 有关Emacs的一些思考

#5

帖子 xhy » 2009-12-08 11:37

那些vi都是用的vim吧,真正用纯vi的已经很少了,
即使在AIX上,也不会忘记装一个vim上去的.

主观感觉是emacs的按键次数比较多,需要记忆的键位比较多。

虽然emacs消除了normal,ex,insert等模式,
但emacs引入的major和minor加起来也一箩筐了

vim是个简单的编辑器,emacs相对复杂,学习起来也困难些

我学过几次emacs,最终都以失败而告终,
因为太习惯vim了,QQ聊天的时候还输入过<ESC>:q

从体积上说,emacs过于庞大,我打包的windows版gvim,
插件和python.dll全在,也就4M,速度也非常快,emacs则要几十M。

国内几家互联网公司,vim用户大致是emacs数倍,但是从水木上看,emcas更加火
目前负债150多万
头像
pocoyo
论坛版主
帖子: 25878
注册时间: 2008-03-25 15:49
来自: 谁知道?
送出感谢: 5 次
接收感谢: 9 次
联系:

Re: 有关Emacs的一些思考

#6

帖子 pocoyo » 2009-12-08 12:14

org-mode :?

这帖死了 都要顶 (额是emacs 菜鸟)

习惯了EMACS的键绑定, ff+firemacs 回帖速很快 :lol:

一直用不惯VI的 :oops: 一般配置也用..

如果WIN下的pidgin里可以用emacs的绑定就好了.. :em06

davyzhu 写了:
最后,用一句话表达我对Emacs的感情,"Use it, love it"^-^
8-) :em11
onelynx
帖子: 817
注册时间: 2008-11-13 16:03
送出感谢: 0
接收感谢: 0

Re: 有关Emacs的一些思考

#7

帖子 onelynx » 2009-12-08 12:41

emacs 让人很纠结
头像
lilydjwg
论坛版主
帖子: 4165
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: 有关Emacs的一些思考

#8

帖子 lilydjwg » 2009-12-08 12:48

本人用Vim,但shell用Emacs的键绑定,Vim在插入和命令模式下也设置了Emacs式的键映射,火狐既不用Vimperator也不用Firemacs,mocp 设置了几个类似Vim我键映射,期待着在IM里可以用上Emacs的键绑定……
头像
ibear
帖子: 787
注册时间: 2006-10-19 8:43
来自: 长江口
送出感谢: 1 次
接收感谢: 2 次

Re: 有关Emacs的一些思考

#9

帖子 ibear » 2009-12-08 13:05

我用的最多是vim,坚持偶尔用用emacs,虽然两边都是菜鸟 :em04

一个ESC到死,一个CTRL到死

要用好这两个神器都需要点编程基础
然两个的脚本系统相对来说是偏门——严格来说lisp不算偏,但就语法来说不是我们常见的basic、pascal、c、java之类
虽然都支持用其它脚本来扩展,比如python,但基本上没人会这么做
好好地做一个碌碌无为的人
头像
lilydjwg
论坛版主
帖子: 4165
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: 有关Emacs的一些思考

#10

帖子 lilydjwg » 2009-12-08 13:22

ibear 写了:...
虽然都支持用其它脚本来扩展,比如python,但基本上没人会这么做
不会吧,我就在用Python扩展Vim啊。只是Vim得要python2.6,而我更喜欢Python3,有点郁闷……
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: 有关Emacs的一些思考

#11

帖子 BigSnake.NET » 2009-12-08 13:30

唉 .. vi 的编程语言学来学去都不会 ==
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星
送出感谢: 1 次
接收感谢: 0

Re: 有关Emacs的一些思考

#12

帖子 xhy » 2009-12-08 13:34

lilydjwg 写了:
ibear 写了:...
虽然都支持用其它脚本来扩展,比如python,但基本上没人会这么做
不会吧,我就在用Python扩展Vim啊。只是Vim得要python2.6,而我更喜欢Python3,有点郁闷……
gvim.exe还是2.4的,我自己编译了一个2.6的,
debian sid的vim用的是2.5,py3可能编译不过去,可以试试。
目前负债150多万
头像
lilydjwg
论坛版主
帖子: 4165
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: 有关Emacs的一些思考

#13

帖子 lilydjwg » 2009-12-08 13:37

xhy 写了:
lilydjwg 写了:
ibear 写了:...
虽然都支持用其它脚本来扩展,比如python,但基本上没人会这么做
不会吧,我就在用Python扩展Vim啊。只是Vim得要python2.6,而我更喜欢Python3,有点郁闷……
gvim.exe还是2.4的,我自己编译了一个2.6的,
debian sid的vim用的是2.5,py3可能编译不过去,可以试试。
我试过了,不行 :em20
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星
送出感谢: 1 次
接收感谢: 0

Re: 有关Emacs的一些思考

#14

帖子 xhy » 2009-12-08 13:39

lilydjwg 写了:
xhy 写了:
lilydjwg 写了:
ibear 写了:...
虽然都支持用其它脚本来扩展,比如python,但基本上没人会这么做
不会吧,我就在用Python扩展Vim啊。只是Vim得要python2.6,而我更喜欢Python3,有点郁闷……
gvim.exe还是2.4的,我自己编译了一个2.6的,
debian sid的vim用的是2.5,py3可能编译不过去,可以试试。
我试过了,不行 :em20
py3很尴尬,可能5年内流行不了,2.6还没普及,2.7正式版正在出
目前负债150多万
poet
帖子: 2841
注册时间: 2006-09-11 22:47
送出感谢: 0
接收感谢: 4 次

Re: 有关Emacs的一些思考

#15

帖子 poet » 2009-12-08 13:40

其实 vim 的用户数更高是毫无疑问的。emacs 的特性决定了它必然是个小众的东西。

另一方面,环境也是促使的原因,我当年用 vi,就是因为全办公室的人只有我一个不会用 vi,那么,不学 vi 都对不起人,所以就 vi 了。

至于 emacs ,毫无疑问他是个好东西。但是,最好的入门方式其实是有一个专家带领,如果身边找不到这样的人,那么要入门其实是个相当困难的事情。
回复

回到 “Vim和Emacs”