原文链接:http://emacser.com/to-emacs-beginner.htm
需要专门花时间去学的软件为数不多, 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的话, 不要再找借口了. 一失足成千古恨, 再回首已百年身啊. 趁年轻喜欢折腾, 多折腾折腾, 不要等到老来少年之狂已成往事之时, 追悔莫及啊. 我以前的一个同事,他以前的公司同事都用vim,所以也用vim,自从我向他介绍了Emacs后,开始学Emacs,一开始也没觉得好用,但是他坚持下来了,越用越好用,最终觉得Emacs太好用了。他是第一个我传道Emacs成功的对象,:)。
其实学习Emacs是有捷径的,那就是天天用。一定要坚持用,不要说你工作中用不到Emacs,不可能,Emacs啥都能干,开发,文本编辑,日程安排,收发邮件等等,你说你会用不到?你这些都还没熟悉?没关系,边学边用就是了,坚持下去,你就会发现用的越来越顺手,越来越喜欢用,这时候你就成功了。
当你掌握了上述的基本概念和基础知识后, 恭喜你, 你将开始初学者的第二个阶段.
接下来, 你可以去网上找一些牛人的配置来看看, 比如王垠(清华的退学博士, 很佩服), 叶文斌(他的主页不在了, 我备份了一份), 王纯业(他的主页也不在了), pluskid(浙大的牛人, yasnippet的作者). 我刚开始学Emacs的时候, 基本上也是看他们的配置. 看到别人的配置中比较有意思的地方, 你再拷贝到你的配置中, 这样看多了, 你就慢慢熟悉Emacs了. 但是我建议不要直接拿别人的配置文件来使用, 毕竟别人的配置是别人的, 它包括了别人的使用习惯, 不一定适合你. 我的配置中就改了一些Emacs基本的快捷键, 比如`C-k’我改成了删除一行, 而不是删除光标到行尾, 这也许不适合你. 当然我对于那些尽量能提供给别人的配置我是单独拿出来做成一个包的, 比如我的颜色主题color-theme-ahei, 还有dired-lis(这是一个使得你在dired中直接输入字母跳到对应文件的包, 就像Total Commander中那样, 非常的好用). 你可以去直接使用这些包, 再经过你自己的配置, 就为你所用了.
初学者在配置Emacs的过程中, 我相信经常会遇到加了某个配置后, 以前某个能用的功能现在不能用了, 不用着急, 我有三条妙计为你排忧解难:
什么是二分调试法? 名字很酷吧? 我自己取的, 二分调试法首先本质上也是排除法, 其次, 二分嘛, 肯定与二分搜索有关系嘛, 对头, 它就是利用了二分搜索法的算法思想. 假如对于64行的配置文件, 现在出现某个问题了, 我首先把后面32行注释掉(用(when nil)注释, 方便快捷), 看看有没有问题:
经过以上递归判断, 最终肯定能找到问题所在. 好多问题我都是靠这种方法解决的.
二分二分嘛, 当然也和二分搜索法效率一样的了, 复杂度lgN, 所以甭管多大的配置文件, 二分调试法一会就能帮你找到问题所在. 100万行?哇,好大,20次搞定!算法的威力强大吧?!
当然适用
你不会傻的真的完全二分吧? 二分的时候对于代码块, 比如for, while等要放在一起, 不能分开.
经过上述的锻炼, 我相信你现在应该可以熟练的使用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包吧!
buffer是文件的内存表示, windows则是显示buffer的区域, 一个frame中可以有多个window, Emacs则可以有多个frame.
Emacs的文档非常丰富, 有Elisp自己的自文档, 还有更详细的info. Elisp中的变量, 函数都有文档. 对于大多数情况都够用了.
1 2 |
(add-to-list 'load-path "~/emacs/lisps") (require 'pluginname) |
(global-set-key key command) |
比如想把C-j绑定到”到达指定行上”(goto-line), 这样就可以了:
(global-set-key (kbd "C-j") 'goto-line) |
kbd是Emacs的宏, 把快捷键转换为Emacs的内部按键表示. 然后执行上面那条语句, 就会使你的配置生效. 然后你可以用C-h k检查一下你的定制是否成功了.
如果对于比较复杂的快捷键, 比如Control x F3, 改怎么写呢? 按C-h k(describe-key), 然后再按下Control x F3, Emacs会出现一个”C-x “, 这个就是你要写到kbd宏里面的内容.
如果你想对某个特定模式比如c++-mode进行快捷键定制, 用define-key即可, 对于上面的例子这样写:
(define-key c++-mode-map (kbd "C-j") 'goto-line) |
define-key第一个参数map一般为mode后面直接加”-map”
1 2 3 4 5 |
(set-background-color "black") ;; 使用黑色背景 (set-foreground-color "white") ;; 使用白色前景 (set-face-foreground 'region "red") ;; 区域前景颜色设为红色 (set-face-background 'region "blue") ;; 区域背景色设为蓝色 |
前阵子,无意中在网上发现一篇文章Effective Emacs中文版,第一条就是说把Caps-Lock和Control键互换,作者是这样说的:
1 2 3 4 5 |
条款1:把Caps-Lock和Control键互换! 在Windows和苹果Mac键盘上,那个Ctrl键居然被远远地放在左下角,而Ctrl对于emacs的使用却是时时刻刻都很重要的, 如果你不把Ctrl放到一个更舒服的位置,你就很难成一个emacs艺术大师了。这位置应该与你的基本手位处于同一行, 那么,Caps Lock是最佳选择。在很多unix工作站上,这个位置放的就是Ctrl键,原因同上。 |
我觉得说的挺有道理的,于是乎,赶紧照着说明把caps lock键和右ctrl键交换过来了,右ctrl键使用的更少,你还可以把caps lock键和右ctrl键旁边的那个右键菜单键,那个键使用的更不频繁。交换方法如下:(以下方法是交换caps lock键和左ctrl键)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
要想在w2000或者XP中实现这个互换,需要修改注册表。从开始菜单中选择“运行”,输入regedit。在左边的树状视图中,找到: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 点击 KeyboardLayout 项,使之获得焦点。再从“编辑”菜单中选择新建一个二进制值,命名为 "Scancode Map",它的类型应该显示为 REG_BINARY。 然后选择这个新建的"Scancode Map"值项,用“编辑”菜单中选择修改二进制值,在二进制编辑对话框中,输入下列数据: 0000: 00 00 00 00 00 00 00 00 0008: 03 00 00 00 3A 00 1D 00 0010: 1D 00 3A 00 00 00 00 00 选择OK关闭对话框,退出注册表编辑器,注销后重登入,你的caps和ctrl键应该就互换成功了。也可能要重启一次。 在linux的X-Window中,可以使用xmodmap工具。在你的主目录新建一个名字为.xmodmap的文件,如果已经存在则只需修改。向该文件加入下列内容: ! ! Swap Caps_Lock and Control_L ! remove Lock = Caps_Lock remove Control = Control_L keysym Control_L = Caps_Lock keysym Caps_Lock = Control_L add Lock = Caps_Lock add Control = Control_L 保存,再向你的 /etc/rc.local 文件加入一行: xmodmap ~/.xmodmap 2>/dev/null 在Mac OS X(Panther或Jaguar)中,你得安装一个修改过的键盘驱动,这说来有些吓人,但是很有效。 这儿有个关于驱动的讨论: http://www.macosxhints.com/article.php?story=20031102032521826 如果你用的不是Mac笔记本,好像有一个XML文件可以编辑来实现,可以参考这儿: http://www.eecs.wsu.edu/%7Eschneidj/mac-os-x-10.3.html#swap 下面的URL有一条关于在其它系统上实现的信息: http://www.manicai.net/comp/swap-caps-ctrl.html |
windows用户还可以去这里看看一些比较好用交换按键的软件, 使用极其简单.
刚开始的时候特别不习惯,因为要用左小拇指来按那个caps lock键,而左小拇指不太容易用力,其中比较难按的键有Ctrl+A,Ctrl+S,Ctrl+Q,Ctrl+Z,主要是那些与caps lock键离的很近的键,不过天将降大任于斯人也,必先苦其心志阿,我经过几天的折磨我的左小拇指,终于能非常熟练的把caps lock键当ctrl键使了,确实方便多了,敲caps lock键的时候,手根本不需要离开键盘区域,特别方便,我现在到别人的机器上,去按Ctrl键,感觉好不习惯,明显觉得Ctrl键比caps lock键难按多了,:)当然, 并不是只有用emacs才需要交换这两个键, 不用emacs的话当然也可以交换, 毕竟快捷键基本上都是以Ctrl键开头的.