Chinaunix首页 | 论坛 | 博客
  • 博客访问: 407223
  • 博文数量: 128
  • 博客积分: 2247
  • 博客等级: 大尉
  • 技术积分: 767
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-17 09:30
文章分类

全部博文(128)

文章存档

2011年(4)

2010年(124)

我的朋友

分类:

2010-06-25 11:20:21

需要专门花时间去学的软件为数不多, 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

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

从哪开始

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

Emacs的考验

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

  • 按键难按
    太冤枉Emacs, Emacs的按键是最好按的, 你最好先把你的一下。
    最常用的是两个键的按键, 分别为ControlAlt键开头的, 其次是四个按键中的有两个按键为Control键的, 为啥四个按键比三个按键还好按? 比如C-x C-c, 这个是Emacs的退出键, 当你按C-x C-c的时候, 不需要先按C-x, 然后手拿起来, 再按C-c, 这样按当然难按, 你应该在按完C-x, Control键的那个手指不需要厉离开 只需要用另外一个手指去按c就行了, 是不是只相当于按了三个按键? 你现在试试, 是不是更好按了些? 你再多试几次, 是不是非常方便? 是不是比两个键的按键差不到哪去?
    Emacs
    的按键设置的非常合理,默认的按键离键盘中心都很近,手指基本不需要离开键盘区,比windows下的按键不知道要好按多少倍,windows 下的快捷键基本都是ControlShift,功能键组合,须不知功能键离键盘中心那么远,多难按阿。
    个人觉得Emacs的按键也比vim的按键设置的合理,虽然vim的按键非常短,但是都是特别难按。比如回到行尾的$,回到第一个非空白字符的^,还有删 除一个单词dw,试想阿,你如果想删除一系列单词怎么办?难道先要数数要删除多少个单词?然后用dNw?太慢了。要么就dwdwdw,。。。,按N 次,这样就需要按2N次键,但是在Emacs下删除一个单词是M-d,你只需要按着Alt键一直不放,然后不停的按d就可以了,仅需要按N+1次键,方便 之极。诸如此类的还有很多。所以如果你仅因为vim按键比较短,而转去学Emacs的话,趁早回头是岸吧,不要被短的按键迷惑了。我一个同事就这样被我从 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进阶

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

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

二分调试法

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

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

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

二分调试法效率如何

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

适用于其他语言吗?

当然适用

注意事项

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

成为Emacs高手

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

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

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

高手之后

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

Emacs学习方法总结

  • 天天用 太重要了
  • 多看文档,包括Emacs的自文档和infoinfoEmacsinfoElisp infoinfo非常非常之详细,想要学好Emacs必须要看的,不要怕英文,我的英文也不好,经常看就明白了,而且还锻炼了自己的英文,还有自文档和 info的英文真的是很简单。
阅读(547) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~