作者:陈斌(redguardtoo)
版本:20150317
更新时间:
原创时间:
版权:本文採用下面协议进行授权,自由转载 - 非商用 - 非衍生 - 保持署名 | Creative Commons BY-NC-ND 3.0,转载请注明作者及出处.
成为高手非常easy.当初我在Vi阵营,偶尔用Emacs还忘记"退出"的快捷键,但一年后我跨入高手行列.
非常多文章强调Emacs有多牛,但关于"怎样做"则语焉不详,即使涉及到"怎样做",谈细节多而方法论少,所以本文就側重方法论.
全文结构例如以下:
简单谈谈,因重点是"怎么做",不是"为什么".
比方一个内嵌的插件管理器是最主要的.
例如以下载了第三方插件,假设发觉其有问题,能够在不碰该插件原始代码的情况下修复.
插件server关闭了,应能够在自带的U盘上高速建立镜像.
眼下流行的编辑器如Sublime Text还做不到以上几点.
Lisp 并不能给你带来不论什么优点,所以其社区成员都是纯粹的技术爱好者,投机取巧的功利主义者对其没有兴趣.
比如,我碰到难题,须要上 IRC 请教国外高手 (工作流是,粘贴代码到http://gist.github.com, 在irc提问,看网页,将解决方式粘贴回来),Emacs 集成了 IRC 工具和浏览器 (w3m),操作就非常方便.
我使用 Visual Studio 多年,Firefox 也是高手,相信我,大多数情况下 Emacs 更快.
当然口说无凭,请看高手操作的 youtube 视频, Emacs Power: Can your editor do THIS!
顺便说一下,非常多刚開始学习的人关心的代码自己主动完毕,几门主流语言支持都不错(包含java).
这在大项目中特别故意,比如,某项目需同一时候编辑 Perl, Java,C, Bash, SQL, 要编辑远程server上的代码,网速不快. Emacs的优势就体现出来了.
我利用一年中通勤时间就取得了非常大进步,自信到能够写下本文.
新手的问题是,開始就 盲目 设定了入门必知.有些必知还非常费时间.
以我为例,
在正式開始前,我须要解释后文会用到的命名惯例,
这个阶段的目的是:
仅需半小时.关于Emacs多难学的谬论能够休矣.半小时的代价微不足道.想想你去年了多少个半小时吧.
这步是必须的,不要跳过!
最起码要知道下面命令,
在不论什么领域要成为高手,兴趣是最重要的.
以我为例,我急需 GTD 的工具,而 Emacs 的 Org-mode 是同类软件中最好的(没有之中的一个). 用 Org-mode 大大节省了时间后,我对Emacs爱屋及乌,兴趣高涨了100倍.
反面样例是非常多人以啃Lisp教程開始他们的Emacs之旅,坚持下来的人寥寥无几.
以这个问题作为出发点,除此之外都能够妥协.
尽管Emacs无所不能,可是饭也要一口一口吃.有时候退一步进两步.
比如,我一直以为Emacs的中文显示非常完美,所以搞不懂为什么有人会在字体配置上花那么多时间.在陆续接到反馈后,我才明确原来是由于我一直在终端下使用Emacs,终端软件能够完美显示中文字体,所以就没Emacs什么事了.须要配置字体的人用的是图形界面Emacs.
当初仅仅在终端下使用Emacs是由于需连接到远程server.我觉得这是重点.甚至为此放弃了美丽的配色主题(后来发觉此牺牲毫无必要).
塞翁失马,由此也避免了图形界面版本号的全部问题.
这是浪费时间!
我应一開始就照抄 世界级大师 Steve Purcell 的 Emacs 配置.
警告,Purcell 总爱试用最新的 Web 开发的新技术,对他而言稳定性不是第一位的,假设你有热情和能力,愿意一起折腾,那么水平会提高非常快.
这个假设是非常重要的前提,当我上了 Purcell 的贼船时,我已有 10 年开发经验,精通多种开发语言.
如你不愿折腾,那至少不要反复我的错误,不要质疑,不要创新,跟着高手做.比方 Eric Schulte 的 Emacs-starter-kit 非常适合刚開始学习的人.Bozhidar Batsov 的配置 也不错 (不一定适合刚開始学习的人).也可用 我的配置.
直说了把,你是刚開始学习的人,開始阶段应以模仿为主.这点怎么强调也只是分!
为了加深印象,让我再举一例.有人向我反映,Emacs 快捷键太多,背起来压力非常大.我的建议是,拿高手配置来用,而不是强加给自己背快捷键这样无聊的任务.你会发觉高手已安装了名为smex 的插件,使直接输入命令比快捷键还快.
假设你还未信服,请再考虑一下我的理由:
我就是这样学到一些高级Lisp技巧的.
不要有报bug低级的想法.非常多高手都是乐于且善于报bug.到是菜鸟喜欢又一次发明轮子.
帮助高手,你的起点就高,还有得到指点的优点.
再找出还有一高手须要改善的地方,使用相同的方法.
比如,默认在Emacs中移动子窗体焦点不是非常方便.需按"C-x O"多次.我找到了emacs插件switch-window,仅仅要按"C-x O"一次,会有提示子窗体编号,接下来仅仅要输入编号就能够了.但还有改善空间,我又找到了window-number.el,仅仅要按"M-NUM"就能够了.
window-number.el已完美,但Alt键还是有点慢,我结合evil和evil-leader,能够按逗号和数字飞速切换子窗体了.
比如,Quora.com上有非常多有趣的话题.请节制兴趣,不去定阅和Emacs无关的话题.
如你仅仅能增加一个社区,那就是Google Plus了.
比如,能够看一下 https://github.com/search?p=1&q=stars%3A%3E20+extension%3Ael+language%3Aelisp&ref=searchresults&type=Repositories 上最酷的 Emacs 插件.
那种"怎样入门"的问题,人人都能插上一脚.即使有高水平的回答,也淹没在众多平凡回答中.
假设你的问题就是比較泛泛而谈的,从一个能測量水准的详细问题入手找到高手,然后看高手是怎样回答那些比較泛的问题的.
之所以加上":en"是由于要排除日文内容.
我会定期搜索,同一帖子重复精读.由于讨论质量非常高.
只是Youtube搜索结果是最佳匹配的.因为相关视频并不多,如依照默认算法,每次总是那几个.所以假设关注最新进展,搜索应以时间排序.
有人抱怨文档太乱,质量參差不齐.前者我有同感.后者不赞同.EmacsWiki文档质量相当高,因其是 唯一的 半官方文档.耐心忍受其乱中有序的现状吧.
最佳阅读方法是,选定一特定主题,从头读到尾.这样对最新进展都了解了.是否要採用其建议另当别论.
生动,样例丰富.作者用心安排了书的结构.比如,非常早就介绍了defadvice的使用方法.defadvice 是Emacs Lisp的精华.
Xah Lee 提供付费Lisp教程也相当不错.
不要低估长期管理的累积效应.
正面样例參考Steve Purcell的配置. 2000年開始14年的维护! 8年github记录! 1000多颗星的配置决非浪得虚名.
知识积累的越多,这些知识之间的联系就会越多.联系增长的速度是以指数的方式增长的.如从头来过,意味着积累的知识的书面记录丢失了.损失是非常大的.基数已归零,增长的量又能有多少.
所以决不要重置配置!
这也是后文谈到为什么要用工具保存配置和知识.
版本号控制能够是觉得一个集中式的知识管理,不论什么时刻不论什么地点对配置的改动都要及时上传合并 (merge).这点是积累能力的关键.
共享实际也是一种利己行为,有非常多人使用我的配置,等于帮我測试.
请点击这里注冊 dropbox 帐号.注意,dropbox client全然能够在国内使用,尽管訪问其首页可能有点问题.
我还写了很多博客文章.这些文章都存在org格式的文件里.最后公布的静态博客也纳入版本号控制,參见http://github.com/redguardtoo/blog.binchen.org.
刚開始学习的人的问题是装了太多插件,管理成了问题.
我建议的原则是少而精,被少数最棒的插件培养出品味后,可自由挑选适合的.
标准例如以下:
全部插件都可通过包管理器下载.
下面是清单:
名称 | 说明 | 同类插件 |
---|---|---|
Evil | 将 Emacs 变为 vim | 没有 |
Org | org-mode,全能的 note 工具 | 没有 |
company-mode | 自己主动完毕输入,支持各种语言和后端 | auto-complete |
expand-region | 按快捷键选中当前文本,能够将选择区域扩展或者收缩 | 没有 |
smex | 让输入 M-x command 变得飞快 | 没有 |
yasnippet | 强大的文本模板输入工具 | 没有 |
flymake-xxxx | 以 flymake 开头的全部包,针对不同语言做语法检查 | flycheck |
helm | 选择和自己主动完毕的框架,在其上有非常多插件完毕详细功能 | ido |
ido | 和 helm 类似,我是 helm 和 ido 同一时候用 | helm |
js2-mode | javascript 的 major-mode,自带 javascript 语法解释器 | js-mode |
w3m | Emacs 的网络浏览器(需安装命令行工具w3m) | Eww |
elnode | elisp 写的 Web server | 不知道 |
smartparens | 自己主动输入须要成对输入的字符如右括号之类的字符 | autopair |
window-numbering.el | 跳转到不同的子窗体 | switch-window.el |
web-mode | 支持各种 HTML 文件 | nxml-mode |
意思是说,牛人其它也非常牛.举一反三你收获会非常多.
Sacha Chua 就是这样一个有牛人气质的女孩,这是她的 Youtube 录像. 她学习的方式是 让 Emacs 自己主动将手冊语音合成,这样她在房间里走来走去的时候也能够听文档了.
我如今有意识地整理高手名单,观察他们 除了Emacs外 用什么工具.
比如, js2-mode 的维护者Masafumi Oyamada(网名mooz)也开发了keysnail和percol. 特别是percol,使我命令行效率提高了10倍.
这个阶段可称之为 心中有剑,手中无剑.
是否用Emacs不重要了,重要的是随心所欲.比如,非常多人争论哪个编辑器自带的文件管理较好.我从mooz那学到大招后,就跳出五行外,不在三界中了.
你仅仅要点击下载两个zip文件就能够了,不须要git的不论什么知识.
比方Emacs有一种叫Autoload的技术. 仅仅有当你用到模块的某一功能时那个模块才会被加载内存. 我推荐的高手都知道这类技巧.
注意,Purcell作为顶尖Web开发人员,会试用各种最新的Web技术,而我的配置Web类插件更新会滞后一段时间.另外我的工具链和Purcell不全然一致.你自己权衡了.
24.4尽管已公布,但还有些小问题,我建议再等半年左右.也也就是说,2015年下半年能够考虑升级.
当然Vi的多模式编辑和快捷键比Emacs要高效得多,所以最佳方案是Vi+Emacs.
眼下我用Evil, 在Emacs下模拟Vim,结合两者长处.
如今我是 神用编辑器之神!
警告,Steve Purcell和我默认都启用了Vim的快捷键,不习惯可打开~/.emacs.d/init.el,将当中一行代码凝视掉,细节參考README.
解决的方法是大家都使Leader(Vim间建支持,Emacs须要安裝第三方插件).
另一个办法是呆在Vim的舒适区里.假设你能忍受没有org-mode和lisp的生活,那么不会有其它问题的.
假设你犹豫不决,请重读"态度决定一切"一节.
默认快捷键经过几十年考验相当高效,未成为高手前还是要忍.
如一定要在用 Windows 快捷键的,可考虑 ergoemacs.
眼下非常多高手在用 Smex,可飞快输入命令,快捷键实际上不须要了.
比如,有人反映右边第80列处总有一竖线,希望能去掉.
实际上这是一特性,提醒用户一行宽度不要超过第80列. 这是 每行不要超过 80 列的原因.
我建议第一年应 尽量理解而不妄加推断.
比如,问:在 .emacs.d 中的 init.el 文件起什么作用?答:google "emacswiki init.el".
如排除了以上原因,带上"–debug-init"參数又一次启动,然后将错误信息及环境报告到相应的开发人员.
报告时应给出细节.比如非常多读者给我的bug都是因为第三方插件版本号较新引起的,我拿到版本号号后,才干下载特定版本号已重现 bug.否则仅仅能靠猜,来回邮件浪费非常多时间.
我终于醒悟过来走上光明大道,非常多走上岐路的人恐怕就没这个觉悟和毅力了.
希望自己掌控坦率地说是一个非技术问题,由于没有自信心,所以有补偿心态. 希望通过一种错误的方式来证明自己.结局无非是恶性循环.
正确地方法是放下身段至少一年 (我已重复强调这一点),打好基本功,读书,虚心地向高手学习.
这也是我为什么建议刚開始学习的人直接使用牛人配置的原因,由于牛人已经攻克了众多兼容性的问题,你仅仅要直接享受他的服务即可了.
即使你发觉了牛人尚未来得及处理的bug,最有效方法是提交报告给牛人,而不是自己去钻研Lisp.
如你不知道怎样在 Windows 下加入改动环境变量,不知道怎样安装第三方工具,建议还是先用Cygwin中的Emacs,因它已自带工具,没有的话安装也方便.且在 Cygwin 下环境变量 HOME 默认已设.
第三方命令行工具清单请參考我的.emacs.d 中的 README(Steve Purcell 没有列这些工具,因他仅仅用Mac).
就C++来说眼下实用苹果公司的 clang 的方案,效果不错.详细用什么插件来调用这些引擎有非常多选择,不展开了.
实战中,我通常就用ctags作为后端引擎,因其通吃全部语言. 尽管解析效果差一点,可是恰当的命名规范(尽量少重名)能够弥补.
如ctags不惬意,可考虑用Gnu Global (gtags).
以上讨论的都是后端引擎.
就前端界面来说,做的比較好的是company-mode,维护非常活跃,你可就特定语言怎样配置咨询其开发人员.
Java和C#语言的主力开发工具最好用IDE而不是Emacs.C#又比Java更难在Emacs中使用.原因你懂的.
这是最佳的,我已试过 全部 可选项.
如你必须訪问Microsoft Exchange Servers, 还要用Davmail.
用了Davmail后, 还能够用Popfile 来分捡邮件. Davmail+Popfile让我生活在天堂.
假设你在那种每天要收到几百电邮的公司工作,你就懂我的意思了.
假设你没有使用 Emacs 24,而且没有全然拷贝高手的配置 (这是本文的中心思想),那么你须要安package.el,细节參考这里.
Emacs 下载软件包 (package) 是通过 http 方式,所以假设网络出问题的话你须要用 http 代理server,详细操作见后文.
比如,
http_proxy=http://127.0.0.1:8000 emacs -nw
和我的配置配套的是我建立的独立的第三方包服务,请參考其主页上的README.
Lisp语法和通常的语言不同,除非有相当编程经验(至少10年),一般人都会对其有一点负面情绪(当然是毫无道理的偏见!).学习不论什么新东西,长期来说兴趣最重要.一開始应避免不论什么负面情绪.
Emacs Lisp又是一种仅仅用于Emacs的语言,有大量术语须要掌握.如"Buffer","Yank","Font face",仅仅有资深用户才干理解.
所以在软件使用没有相当基础前学习其拓展语言是浪费时间.
參考前文关于找到切入点的一节,我推荐的顺序是,先用优秀的配置享受到优点,有了兴趣后学习Lisp就水到渠成了.
有世界级高手(名字不点了)对我的建议不以为然,他说Lisp非常强大非常有趣,应该先学.
可是他的盲点在于,忘记了自己转向Emacs前在其它编辑器上(如Sublime之类)已是一览众山小了.他用Python拓展Sublime已熟到厌烦,Lisp的奇特语法反而刺激了兴趣.编辑器的经常使用术语也不在话下. 而本文针对的是大多数的凡人.
选择适合自己的路,一年以后天才也好,凡人也好, 达到的高度都是一样的.
我用过很多编辑器,除了Emacs没有一个能做到"一切可改"这点 .vim也不行.
所以学点Lisp对提高Emacs水平没坏处.另外Lisp语法不错,值得程序猿一学.
顺便说一下,Lisp非常easy,比VBeasy多了,一旦你适应其语法,就会发觉它事实上对程序猿蛮友好的,至少少打非常多字.
前文已强调过以兴趣和解决实际问题作为切入点.
举一些我自己的样例说明:
最好的英文教程是Carsten Dominik(Org-mode发明者)在google tech talks上的演讲.其要点为org-mode本质是一个文本文件,仅仅要记住按TAB展开或者缩进条目就能够了.其它特性可慢慢学.
从有用角度讲,Emacs和其它工具结合有时能更快完毕工作(只是在没有一年的修炼之前 千万不要猜Emacs不能做什么).
下面是Emacs不一定能吃独食的地方:
重点是头脑灵活,坚信Emacs无所不能,偶尔也适当变通.
这是我的 Twitter 和 Google Plus 以及 微博,也可通过我 email<chenbin DOT sh AT GMAIL DOT COM>联系我.我在新浪 weibo.com 上开通账号 emacsguru.
主力博客为 http://blog.binchen.org.
我不会回答详细配置的问题.假设你通读本文,应知道哪里找答案更好.
再强调一下本文最重要的观点:
关键是你以严肃的态度把其当作专业技能学习.
非常多人之所以不赞同我的核心观点,是由于内心深处还有把Emacs当玩具用来炫耀"我有多酷"的意识.
Emacs当然非常强大,能够作为一种另类娱乐来博眼球.可是它的本质是为专业人士使用的神器.
让我打个例如,职业杀手对于杀人的刀仅仅关心两件事:
刀的装饰是否美丽或技巧是否自己原创对他并不重要.
Emacs就是那把刀.
如有不论什么疑问,请在以上网址报bug.这比Email快.因GitHub会以邮件通知我,GitHub邮件永远归类至我的最优先目录下.
如直接给我发Email,会淹没于垃圾邮件中.
假设你拷贝粘帖全文,会使自己和他人错过更新.
我建议分享本文的链接,