首页 > 初级, 学习Emacs > 致Emacs初学者

致Emacs初学者

2009年11月30日 ahei 发表评论 阅读评论

需要专门花时间去学的软件为数不多, Emacs正是其中之一. 我周围的好多人在我的”鼓吹”下, 也对Emacs感兴趣起来, 可是不过好久, 就放弃了, 究其原因, 我想是他们对Emacs的认识不够, 或者是学习方法不正确. 在这里, 我想说一下Emacs初学者应该注意的一些问题.

Emacs是什么

首先, 我想你应该要知道Emacs是什么, 不知道的同志请看这里.

为啥要学Emacs

  • 赶时髦
    那我劝你还是别学了, 学Emacs可赶不起时髦, 用Emacs的人可少了. 我呆过的三个公司, 都是在linux下做开发的, 但每个公司都只有2,3个人用. 我一个同事告诉我, 他认识的人中只有我一个人用Emacs. 而且你不但赶不起时髦, 还很有可能被人”鄙视”. 我曾经向一位朋友推荐Emacs, 说Emacs是一款非常强大的工具. 他使用了后, 告诉我, Emacs太土了, 删之. 看来从古到今, 相貌永远起着不小的作用. 我还有一个同事, 问我用什么工具开发, 我说用Emacs, 他说, 太土了, 远古时期的工具, 用Eclipse吧. 我当时只有一种感觉, 我比窦娥还冤. 本曾想他夸我一句, “You are cool!”, 没曾想, …, 伤心往事.
  • 装酷
    嗯, 首先得承认在这个大环境中, 用Emacs确实很酷. 在这个菜单很少, 鼠标动作很少, 没有漂亮的界面, 只有一个黑乎乎的文本框的软件里, 完全用键盘操作, 多酷多拉风啊. 可是, 酷虽酷, 可不是一时半会能学会的, 得花时间去学, 得有毅力, 如果你没有这个毅力的话, 就此打住.
  • 想在特定语言的功能方面超过特定IDE
    比如, 你想在java语言方面, 针对java的特有的功能这一方面, 你想使用Emacs超过Eclipse, 那Emacs不太适合你. Emacs的年龄很大, 比我们这些年轻人的年龄都要大, 好多高级功能, 比如Eclipse的代码重构, 它就没有. 一般IDE都有的代码补全, 代码浏览, Emacs在这方面也做的不是很好, 当然这些方面, 都会有的, 因为Emacs的扩展性实在是太强大了, 任何人都可以扩展它, 那些功能只要用户需求大, 最终会有人写的. 既然这样, 那么Emacs的强项到底在哪里呢?

Emacs的强项

  • 无限的定制性
    萝卜青菜, 各有所爱. 人与人之间的习惯差别太大了. 一款工具怎么能适用所有人? 那可定制性是必不可少了. Emacs在这方面做的非常出色. 你可以对任何选项进行定制, 你可以定制任何按键, 你可以。。。.
  • 无限的扩展性
    如果你使用了一款扩展性不强的软件, 如果没有别的软件中某个特别好用的功能, 那么你只有期望软件作者能为你开发这一功能了. 如果用户都希望有这个功能的话, 也许你不用等多久作者就为用户开发了那个功能了. 但是如果只是一个你觉得好用的功能呢? 那怎么办? 恐怕作者不大可能为某个特定用户开发特定的功能. 这时候, 扩展性显得多么重要. Emacs在这方面也做的非常出色. 它以强大的Elisp语言作为扩展语言, 扩展性远远超过几乎任何一款软件(包括vim).

Emacs适合哪些人

  • 有区别于别人的使用习惯, 有一些自己的, 软件作者不会帮你实现的需求的人
  • 喜欢追求高效率操作的人. 如果你喜欢用鼠标点来点去, 如果你喜欢按那些难用的功能键, 那就不用再看了, Emacs不太适合你.
  • 喜欢折腾的人. 用Emacs是需要折腾精神的, 如果你是一个懒人, 不太想折腾, 恐怕Emacs不适合你, 想用Emacs不折腾, 不大可能.

在什么操作系统下使用Emacs

Emacs支持众多的操作系统, Windows也在其中, 但是如果想发挥Emacs的巨大威力的话, 建议你还是不要在Windows下使用Emacs, 说的不好听点, 在Windows下使用Emacs一是折磨你自己, 二是糟蹋Emacs, 因为Emacs用到好多第三方的工具, 比如w3m, 在*nix下安装都非常方便, 在Windows下都比较麻烦, 而且有的工具干脆就没有Windows版本. 我见到好多Emacs的初学者, 由于不熟练*nix, 选择在Windows下折腾Emacs, 什么HOME问题, 什么字体问题啊, 简直就是折腾不完的问题. 要是真的想学好Emacs的话, 必须要学好*nix, 而且这么好的操作系统, 熟练使用它也是一件幸事.

从哪开始

如果你能通过上面几条, 恭喜你, 你可以开始你的Emacs之旅了.
那么到底怎么学习Emacs呢? 我觉得刚开始学习Emacs的时候, 应该先了解一下Emacs的一些基本概念和基本知识(毕竟Emacs和其他的IDE的一些概念和理念是不同的), 比如, Emacs的buffer, window, frame, mode, Isearch. 知道这些最基础的概念之后, 应该再学习一下最基本的定制知识, 比如绑定快捷键啊, 定制选项啊, 还有看文档的方法, Emacs中的文档有函数自己的文档, 还有强大的info系统. 关于这些基础知识, 我推荐你去看《学习GNU Emacs》(中文版, 英文版)这本书, 非常适合初学者. 不过如果你想要快速入门的话, 可以看Emacs快速指南, 打开Emacs后, 按C-h t即可, 这是Emacs内置的文档, 有中文版. 笔者还写过一篇介绍这方面基础知识的文章, Emacs初学者必知必会, 感兴趣的读者也可去看看.

Emacs的考验

你现在是不是有点不想学Emacs了? 为啥?

  • 按键难按
    太冤枉Emacs了, Emacs的按键是最好按的, 你最好先把你的Control键和Caps lock键交换一下。
    最常用的是两个键的按键, 分别为Control和Alt键开头的, 其次是四个按键中的有两个按键为Control键的, 为啥四个按键比三个按键还好按? 比如C-x C-c, 这个是Emacs的退出键, 当你按C-x C-c的时候, 不需要先按C-x, 然后手拿起来, 再按C-c, 这样按当然难按, 你应该在按完C-x后, 按Control键的那个手指不需要厉离开 只需要用另外一个手指去按c就行了, 是不是只相当于按了三个按键? 你现在试试, 是不是更好按了些? 你再多试几次, 是不是非常方便? 是不是比两个键的按键差不到哪去?
    Emacs的按键设置的非常合理,默认的按键离键盘中心都很近,手指基本不需要离开键盘区,比windows下的按键不知道要好按多少倍,windows下的快捷键基本都是Control,Shift,功能键组合,须不知功能键离键盘中心那么远,多难按阿。
    个人觉得Emacs的按键也比vim的按键设置的合理,虽然vim的按键非常短,但是都是特别难按。比如回到行尾的$,回到第一个非空白字符的^,还有删除一个单词dw,试想阿,你如果想删除一系列单词怎么办?难道先要数数要删除多少个单词?然后用dNw?太慢了。要么就dw,dw,dw,。。。,按N次,这样就需要按2N次键,但是在Emacs下删除一个单词是M-d,你只需要按着Alt键一直不放,然后不停的按d就可以了,仅需要按N+1次键,方便之极。诸如此类的还有很多。所以如果你仅因为vim按键比较短,而转去学vim的话,趁早回头是岸吧,不要被短的按键迷惑了。我一个同事就这样被我从vim阵营拉过来了,:)
    其实上面所说的vim按键的那个问题, 可以通过”.”来完美的解决. 但是其他的问题, 可能就稍微麻烦了点, 比如vim编辑的时候要不停的在编辑模式和命令模式来回切换, 当然可以通过映射来做到不切换, 但是映射的键太多, 而且映射完, 按键也基本和Emacs的差不多了, :)
  • 平时工作太忙, 没时间学, 以后有空再学
    别再有这种想法了, 你会永远没空. 明日复明日, 明日何其多啊. 你什么时候工作会闲下来? 公司辞退你的时候吗? 我认识中的人中, 好多人一开始都对Emacs挺感兴趣的, 最后都是因为没时间, 与Emacs无缘. 现在的人, 有哪个不忙? 时间就像***(此处已被宇宙第一帝国FFF工程抹去数字,详情请致电FFF工程总部热线444-54545444), 挤挤总会有的. 要是真想学Emacs的话, 要加班去学Emacs. 等了解完Emacs的基本概念和基础知识后, 要在工作中去用Emacs, 不用Emacs你永远也学不会Emacs. 在用的过程中, 碰到问题, 晚上再继续学. 长此以往, 岂有不熟之理. 我都是靠晚上加班来学Emacs的.

如果你真的想学Emacs的话, 不要再找借口了. 一失足成千古恨, 再回首已百年身啊. 趁年轻喜欢折腾, 多折腾折腾, 不要等到老来少年之狂已成往事之时, 追悔莫及啊. 我以前的一个同事,他以前的公司同事都用vim,所以也用vim,自从我向他介绍了Emacs后,开始学Emacs,一开始也没觉得好用,但是他坚持下来了,越用越好用,最终觉得Emacs太好用了。他是第一个我传道Emacs成功的对象,:)。
其实学习Emacs是有捷径的,那就是天天用。一定要坚持用,不要说你工作中用不到Emacs,不可能,Emacs啥都能干,开发,文本编辑,日程安排,收发邮件等等,你说你会用不到?你这些都还没熟悉?没关系,边学边用就是了,坚持下去,你就会发现用的越来越顺手,越来越喜欢用,这时候你就成功了。

Emacs进阶

当你掌握了上述的基本概念和基础知识后, 恭喜你, 你将开始初学者的第二个阶段.
接下来, 你可以去网上找一些牛人的配置来看看, 比如王垠(清华的退学博士, 很佩服), 叶文斌(他的主页不在了, 我备份了一份), 王纯业(他的主页也不在了), pluskid(浙大的牛人, yasnippet的作者). 我刚开始学Emacs的时候, 基本上也是看他们的配置. 看到别人的配置中比较有意思的地方, 你再拷贝到你的配置中, 这样看多了, 你就慢慢熟悉Emacs了. 但是我建议不要直接拿别人的配置文件来使用, 毕竟别人的配置是别人的, 它包括了别人的使用习惯, 不一定适合你. 我的配置中就改了一些Emacs基本的快捷键, 比如`C-k’我改成了删除一行, 而不是删除光标到行尾, 这也许不适合你. 当然我对于那些尽量能提供给别人的配置我是单独拿出来做成一个包的, 比如我的颜色主题color-theme-ahei, 还有dired-lis(这是一个使得你在dired中直接输入字母跳到对应文件的包, 就像Total Commander中那样, 非常的好用). 你可以去直接使用这些包, 再经过你自己的配置, 就为你所用了.
初学者在配置Emacs的过程中, 我相信经常会遇到加了某个配置后, 以前某个能用的功能现在不能用了, 不用着急, 我有三条妙计为你排忧解难:

  • 当你的配置出现问题时, 在Emacs启动命令后增加参数”–debug-init”, 这样启动后, 如果配置出错, Emacs会报出具体出错的位置, 这样你就可以很容易定位问题了.

  • 上述加参数的方法, 只适用于你的配置使得Emacs启动出现错误, 但是如果Emacs启动没有出现错误, 但是你需要的某个功能就是不能正常使用该怎么办呢? 很简单, 把你的配置用版本控制工具管理起来, 我的配置DEA就用svn管理起来, 记住, 用版本控制工具的时候, 一定要记得写日志, 方便以后出问题的时候, 容易找出问题, 我接触的人中, 好多人都没有写日志的习惯. 当你现在的版本出现问题时, 你可以看看以前的版本有没有问题, 找到一个没有问题的版本, 然后再用现在的版本和以前的版本比较一下, 看是修改了哪些配置, 然后再在这些配置上集中找问题.
  • 如果你嫌版本控制麻烦, 或者出问题的版本和不出问题的版本之间的差别很大的话, 还有一种方法. 排除法! 即不管你有多少条配置语句, 我一个一个的排除, 我先去掉第一条语句, 看有没有问题了, 没有啦? 恭喜你啦, 你试一次就试出来了. 还有? 也不用担心, 继续试. 你是不是觉得我这个方法似乎太傻了, 对于几行的配置文件, 这样是管用, 那么对于几百行, 甚至上千行的配置文件怎么办? 一个一个的排除? 太慢了吧? 别急, 我有二分调试法为你降妖附魔.

    二分调试法

    什么是二分调试法? 名字很酷吧? 我自己取的, :) 二分调试法首先本质上也是排除法, 其次, 二分嘛, 肯定与二分搜索有关系嘛, 对头, 它就是利用了二分搜索法的算法思想. 假如对于64行的配置文件, 现在出现某个问题了, 我首先把后面32行注释掉(用(when nil)注释, 方便快捷), 看看有没有问题:

    1. 没问题? 太好了, 那问题肯定是出在33行到64行之间, 继续二分, 把刚才的注释取消掉, 把48行到64行之间的代码注释掉, 继续判断.
    2. 有问题? 同样太好了, 那问题肯定是出在1到32行之间, 继续二分, 把刚才的注释取消掉, 把16行到32行之间的代码注释掉, 继续判断.

    经过以上递归判断, 最终肯定能找到问题所在. 好多问题我都是靠这种方法解决的.

    二分调试法效率如何

    二分二分嘛, 当然也和二分搜索法效率一样的了, 复杂度lgN, 所以甭管多大的配置文件, 二分调试法一会就能帮你找到问题所在. 100万行?哇,好大,20次搞定!算法的威力强大吧?!

    适用于其他语言吗?

    当然适用

    注意事项

    你不会傻的真的完全二分吧? 二分的时候对于代码块, 比如for, while等要放在一起, 不能分开.

成为Emacs高手

经过上述的锻炼, 我相信你现在应该可以熟练的使用Emacs了. 但是还不够, 为什么还不够?

  • 遇到问题怎么办
    除了Google, 或者向别人请教之外, 能不能自己来解决?
  • 想要实现一些Emacs没有的功能

这就需要你懂Elisp语言了.
学Elisp主要是看文档(废话), 一个是Emacs函数的自文档(M-x describe-function, 默认按键绑定是C-h f), 还有更强大的就是Elisp的info. 英文不好的同志(其实Emacs函数的自文档和info的英文都很简单)可以看看叶文斌的elisp教程,《GNU Emacs Lisp编程入门中文版》. 刚开始学Elisp的时候, 可以先看看上面的2个中文教程, 系统了解一下Elisp, 看了差不多后, 可以开始看看Emacs函数的自文档, 自文档非常的方便, 可以在看代码的时候, 随时遇到不懂的函数随时查看文档. 我写了两个查看Elisp自文档和代码非常方便的包, find-symbol, describe-symbol, 看Emacs的代码和别的插件的代码也是一个非常好的学习Elisp的方法,有兴趣的同志可以试试. 等到自文档看的比较熟练后, 可以看info了, info写的非常详细. 当然, 以上过程, 并不一定要循序渐进, 你也可以在看自文档的同时, 看看info.

高手之后

哈, 为Emacser们多写点方便实用的Elisp包吧!

Emacs学习方法总结

  • 天天用 太重要了
  • 多看文档,包括Emacs的自文档和info,info有Emacs的info和Elisp的info,info非常非常之详细,想要学好Emacs必须要看的,不要怕英文,我的英文也不好,经常看就明白了,而且还锻炼了自己的英文,还有自文档和info的英文真的是很简单。
分享家:Addthis中国
GD Star Rating
loading...
致Emacs初学者, 9.6 out of 10 based on 112 ratings 标签:ahei, buffer, caps lock, control, DEA, eclipse, Elisp, Emacs, emacser, IDE, java, linux, lisp, mode, org, pluskid, se, snippet, theme, vi, vim, w3m, windows, yasnippet, 主题, 二分调试法, 代码补全, 光标, 叶文斌, 安装, 定制, 开发, 扩展, 按键, 插件, 王垠, 王纯业, 看文档, 算法, 补全, 调试, 配置, 配置文件, 配色, 颜色, 鼠标

相关日志

分类: 初级, 学习Emacs
  1. 匿名
    2011年4月28日17:56 | #1

    我想在emacs中用C-c $ 来定义字符$$,并把光标放在两个$中间,
    以及类似的C-c { -> {}, C-c ( -> (), 请问要如何实现.

    [回复]

    ahei 回复:

    @, 不好意思,我工作比较忙,得你自己学习elisp了

    [回复]

  2. 匿名
    2011年5月3日20:33 | #2

    个人觉得Emacs的按键也比vim的按键设置的合理,虽然vim的按键非常短,但是都是特别难按。比如回到行尾的$,回到第一个非空白字符的^,还有删除一个单词dw,试想阿,你如果想删除一系列单词怎么办?难道先要数数要删除多少个单词?然后用dNw?太慢了。要么就dw,dw,dw,。。。,按N次,这样就需要按2N次键,但是在Emacs下删除一个单词是M-d,你只需要按着Alt键一直不放,然后不停的按d就可以了,仅需要按N+1次键,方便之极。诸如此类的还有很多。所以如果你仅因为vim按键比较短,而转去学vim的话,趁早回头是岸吧,不要被短的按键迷惑了。我一个同事就这样被我从vim阵营拉过来了,:)

    vim
    dw之后.. 再按 点 点 点 (就是句号) 比emacs方便吧.. 至少人家不用按着alt键..

    [回复]

    匿名 回复:

    @, 作者明显不了解Vim :mrgreen:

    [回复]

    匿名 回复:

    @, 是啊,孰不知还有命令计数,如果要删N个word的话,用Ndw就好了,只需要3个按键

    [回复]

  3. hers
    2011年5月5日13:18 | #3

    请教ahei大牛,我下载了dea-1.4。
    使用时的目录结构是:
    .emacs文件:~/.emacs,其他用到的文件:~/.emacs.d/plugins/……
    然后启动emacs,启动过程中出现”File error:can not open load file ,remember”
    请问这是什么原因呢?

    [回复]

  4. hers
    2011年5月5日13:22 | #4

    补充下:我用的是fedora 10,用你说的安装方法不起作用,所以自己配置了一下目录结构,直接就把相关文件复制粘贴了,然后修改了 .emacs的加载路径。

    [回复]

    ahei 回复:

    @hers, 怎么不起作用阿?

    [回复]

  5. 2011年5月15日21:51 | #5

    我用Emacs开发Java已经有很久了。同事非常羡慕我,因为我有JDEE做代码智能提示和代码跳转,搞JDEE真的是折腾了很久。JDEE也可以很方便的调试,不过要用到jdb调试。我用Maven管理项目,因此其他的IDE也可以共享我的项目。访问文档也很简单,我安装了一个java doc helper,真的很方便。
    当使用MySQL的时候,也十分方便。
    唯一不方便的就是大规模的代码重构因为要估计svn命令,命令行操作很不方便,我会使用NetBeans帮个忙。
    好处很明显,我随便拿一台旧机器都可以飞快的开发,用时髦IDE的同事总是抱怨他们的即使编译影响开发速度,即便他们的机器已经比我好多了。我也很容易就在服务器上远程开发。
    目前正打算用Emacs开发C++,之前一直用NetBeans开发c++。但是非常担心Emacs下面没有什么好的智能提示解决方案,C++的模板是非常复杂的,NetBeans的智能提示相当准,这是我时间紧张的时候用NetBeans的原因。

    [回复]

    ahei 回复:

    @chenshu, auto complete还是很不错的, 再加上cedet就差不多了, see http://emacser.com/cedet.htm, http://emacser.com/auto-complete.htm

    [回复]

    chenshu 回复:

    @ahei,
    @ahei
    谢谢,我会用你的方案。

    [回复]

  6. 2011年6月26日09:59 | #6

    @匿名
    (defun insert2$ ()
    (interactive)
    (insert “$$”)
    (backward-char)
    )
    (global-set-key (kbd “C-c $”) ‘insert2$)
    其他的,改一改就行

    [回复]

  7. newbeebird
    2011年7月19日11:10 | #7

    你好, 有个问题想请教, google了很久都没有找到答案… – -!

    我的期望是这样的, 某些设置只希望在指定的模式下产生效果,或者指定在除了某模式下其余都有效

    例如,
    (global-hl-line-mode 1)

    在shell-mode下不发挥作用, 但是在其他模式下发挥作用, 应该怎么做?

    谢谢.

    [回复]

    ahei 回复:

    @newbeebird, 看dea中的hl-line-settings.el

    [回复]

  8. 2011年8月3日21:07 | #8

    用了一段时时间Vim了…我想Emacs也会慢慢接触的吧,学Emacs或Vim看里面的英文文档慢慢学也挺有意思的, 又可以实地操作, 也会慢慢提高自己的英文阅读能力… :wink:

    [回复]

  9. 向往自由
    2011年8月13日18:59 | #9

    我决定加入emacs阵营!!!

    [回复]

  10. 2011年9月6日10:13 | #10

    @向往自由
    哈哈,我也是的。

    [回复]

评论分页
1 2 3 4 37697
  1. 2011年10月21日14:25 | #1
  2. 2011年10月31日10:27 | #2
  3. 2011年11月15日20:58 | #3
  4. 2014年6月27日13:47 | #4
  5. 2014年6月30日00:56 | #5
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: