成为Emacs高手非常easy.一年前我还在Vi阵营,偶尔用Emacs还忘记"退出"的快捷键,但一年后我跨入高手行列.
但关于"怎样做"则语焉不详,即使涉及到"怎样做",谈细节多而方法论少,所以本文就是側重方法论.
全文结构例如以下:
简单谈谈,由于我本文的重点是"怎么做",而不是"为什么".
一旦你尝过最好的,你自然了解好的编辑器应该有哪些功能.
比方一个内嵌的插件管理器是最主要的.
Emacs用Lisp开发,Lisp的不同平常的语法决定了其开发人员都是资深开发人员,掌握了多门语言.
Emacs本身并不能给你带来不论什么优点,这就决定了其社区成员都是纯粹的技术人员,投机取巧的功利主义者对其是没有兴趣.
这里的很多其它并非和IDE比支持某编程语言的特性很多其它,而是指Emacs内可完毕的通用任务比較多,并且更快捷.
比如,我做开发时碰到难题,须要实时上IRC请教国外高手(工作流包含粘贴我的代码到pastebin或者gist,在irc内提问,看网页,将解决方式粘贴回来),Emacs集成了IRC工具和浏览器(w3m),操作就非常方便.
我使用VisualStudio多年了,Firefox使用我也是高手,相信我,大多数情况下还是Emacs更快.
顺便说一下,非常多刚開始学习的人关心的代码自己主动完毕,我能够说除了Java以外的几门主流语言,支持都非常不错了.
个人会丧失开发软件的兴趣,公司会倒闭而停止维护软件.可是自由软件基金会会一直存在下去.Emacs作为其招牌软件也会一直维护下去,我在其上投资永远不会贬值.
软件是开源的,配置是纯文本,并且软件的资源消耗较小,安装包非常小(命令行版本号的安装包30M左右),所以在不论什么环境下我都能够用Emacs開始工作.
这在大项目中特别明显,比如,某项目我须要同一时候编辑perl、java、C、bash、SQL,须要远程编辑在美国server上的代码,网速也快.Emacs的优势就体现出来了.
我没说一年内必须什么事都不干专门学Emacs,没有短期利益回报的悬梁刺股式学习方法是我最反对的.
长期来说你能取得的成就是由态度决定的.
优秀人士的特点:
比如,尽管Emacs默认的快捷键已非常高效,可是我更新了我的快捷键操作.保存文件时我原来要按按"Ctrl+XCtrl+S",如今按",ww".少按了一个键,同一时候手指避免了额外移动一寸去按Ctrl键.
这似乎是个微小的修改,由于保存文件并非一个非常频繁的动作.并且放弃熟悉的快捷键操作,使用一个陌生的快捷键開始也有点不习惯(后文我提到,我也是一个熟练的Vim用户,可是Vim的保存快捷键默认是":w",并非如今的键位).
如果我一開始由于已习惯了Vim或者Emacs默认的快捷键,或由于改进保存文件动作的效率提升太小,所以拒绝改变,那么就不会有后来的大规模优化键位的project.
或者有人说输入代码效率仅仅是软件开发流程中非常小一部分,重要的是"XXXX(编程思想,架构,框架…)".此所谓顾左右而言它.假设你能举一反三,自然能够猜到相同的方法和原则也适用于软件开发的不论什么一部分,"可是…"仅仅是不做的借口罢了.
Emacs本质上是给geek(热爱技术,追求高效的人)使用的软件.所以使用它须要一点点Linux的基本知识.假设你没有这方面的经验,那么下一节"无Linux经验新手高速指南"就是为你准备的.否则可跳过.
步骤的要点在于起点要高,照抄高手的配置,尽量理解高手的配置,不要改动,除非你要给高手报bug.
熟悉配置后应增加社区,使用高手开发的插件,培养品味.到达一定的程度后要回报社区,多做測试,多报bug.
下面是我的建议:
实际上我在后文已经把这个怎样入手的问题说得非常清楚了.
比方我后文谈到,我就是从org-mode入手的,又谈到你应跟着高手学习而不要自己瞎摸索.假设能举一反三,你应想到假设你不确定从何处着手,那么跟着我做(用org-mode)应该是不会错的.
打开Emacs后,同一时候按下Alt和X健,输入help-with-tutorial(后文中,类似快捷键以简写`M-xhelp-with-tutorial`取代),回车.
仅需半小时.关于Emacs的多难学的谬论能够休矣,由于半小时的代价微不足道.想想你去年有多少小时白白虚度了吧.
这步是必须的,不要跳过!
比如,非常多人的问题是不知道怎样查看变量函数的文档,这在官方教程中都有说明.
由于假设微小的努力能得到巨大的回报,你就会越学越有乐趣,进入一个感情上的正反馈.
长期来说,在不论什么领域要成为高手,兴趣是最重要的.
我知道有资深的10年经验的Emacs用户也认为Gnus太难用.
即使你终于学会了Gnus,能做的事也和Gmail的Web版本号有差距(比方搜索邮件,附件预览),并且Linux下也有很多同类软件.这就是典型的投资极大,回报非常小.
所以对新手来说,从Gnus入手Emacs是非常成问题的.
这方面我是个负面模范.一開始我还是抱着玩的心态,喜欢到处找有趣的配置粘贴到我的.emacs中去.
警告,Purcell总爱试用最新的Web开发的新技术,对他而言稳定性不是第一位的,假设你有足够的热情和能力,愿意和他一起折腾,那么你的Emacs水平会提高得非常快
这个假设是非常重要的前提,当我上了Purcell的贼船时,我已有10年开发经验,精通多种开发语言.
直说了把,你是刚開始学习的人,開始阶段应以学习模仿为主.这点怎么强调也只是分!
为了加深印象,让我再举一个样例.一些读者向我反映,Emacs快捷键太多,背起来压力非常大.实际上这是刚開始学习的人先入为主的偏见.对高手来说,有了恰当的工具后,快捷键非常多情况下并不须要.盲目地去背快捷键仅仅会延迟你成为高手那一刻的到来.假设你仅仅是复制了高手的配置開始使用而不是纠结于完毕背快捷键这个无聊的任务,你会发觉高手已安装了名为smex的插件,使得你直接输入命令比用快捷键还快.所以背快捷键也不须要了.
这是本文最核心的观点,假设你还没有信服的话,请再考虑一下我的理由:
要像武侠小说里那样拜高手为师简直是白日做梦.唯一能让高手指点你的办法是先付出.最可靠的付出就是给高手报bug.
不要有报告bug是低级活的想法.我看到非常多高手都是乐于并且善于报告bug的.到是非常多菜鸟喜欢又一次发明轮子胜于帮助别人改善轮子.
帮助高手,你的起点就高,还有得到高手指点的优点.
然后找出还有一点高手须要改善的地方,使用相同的方法.
假设要充分利用社区,最重要的是专一.
比如在Quora.com上有非常多有趣的话题.我会节制自己的兴趣,不去定阅和Emacs无关的话题.
假设你仅仅能增加一个网络社区的话,那么就是GooglePlus了.
GitHub的版本号控制服务非常好.如今它的社区化倾向越来越强了,我喜欢.
我偏爱的是"列举Emacs中最实用的命令"之类的详细问题.非常多回答拓宽了我的眼界.即使我已相当精通Emacs.
那种"怎样掌握Emacs"的问题,人人都能插上一脚.即使有些高水平的的回答,也淹没在众多平凡的回答中.
即使你的问题是比較泛泛而谈的,从一个可以測量的水准的详细问题入手找到高手,然后看高手是怎样回答那些比較泛泛而谈的问题的.
twitter人多,更新结果快.之所以加上":en"是由于有非常多日文内容,我不懂日文.
google"emacs-related-keywordssite:stackoverflow.com"
我会定期搜索,相同的帖子重复精读.由于stackoverflow上的讨论质量非常高.
有人抱怨EmacsWiki文档太乱了,质量也參差不齐.对于前者我也有同感.对于后者我不赞同.EmacsWiki的文档质量相当高,因其是唯一由社区维护的半官方的文档.耐心忍受其乱中有序的现状吧.
读EmacsWiki的最佳方法是,选定一个特定主题,从头读到尾.这样你对特定主题的最新进展都了解了.是否要採用EmacsWiki的建议另当别论.
决不要低估长期的自我管理的累积效应.
我常常看到有人在网上悲伤地抱怨说由于重装电脑,几年积攒的emacs配置都丢失了.也有人自豪地宣称把自己的.emacs主动干掉,为的是弄一个组织的更好的配置.
你的技巧是成指数增长的,知识积累的越多,这些知识之间的联系就会越多.这些联系增长的速度是以指数的方式增长的.把你emacs配置从头来过,意味着你的积累的知识书面记录丢失了.损失是非常大的.
所以我建议决不要丢弃你的Emacs配置.
版本号控制能够是觉得一个集中式的知识管理,不论什么时刻不论什么地点对Emacs配置的改动都要及时上传和合并(merge).这点对于个人能力的长期积累非常重要.
共享Emacs实际也是一种利己的行为,有非常多人使用我的配置,等于帮我測试.
Emacs第三方插件非常多.刚開始学习的人的问题是装了太多插件,插件的管理成了问题.
我建议一開始选择插件的原则应该少而精,被最棒的插件培养出了品味后,可自由挑选适合的插件.
我推荐插件标准例如以下:
全部插件都能够通过Emacs的包管理器下载.
下面是插件清单:
假设你照着我以上的做法做,就能够认识到Emacs牛人其它也非常牛.Emacs实际上体现了牛人的一种生活方式.
Emacs之所以强大是由于Emacs后面有很多牛人.
我认识到这一点后開始有意识的整理Emacs高手名单,观察高手是用什么工具的,这使我收益良多.
除了README外没有,我主要是通过看EmacsWiki和源码来了解.一个窍门是通常主源码文件的头部有使用指南.
眼下的最新的稳定版是Emacs24.3.1,建议不要有用高于这个版本号的Emacs.通常你不用操心版本号号的问题.主流的Linux发行版会帮你处理这个问题.
嘿嘿,我也是Vi精通后转到Emacs的.我转换阵营的原因就是由于Emacs的强大(比如和gdb的完美结合)以及其脚本语言是lisp.
当然Vi的多模式编辑和快捷键比Emacs要高效得多,所以最佳方案是Vi的快捷键加上Emacs的强大.
眼下我在用evil-mode,在Emacs下模拟Vim操作,结合了两者的长处.简单地说,如今我的执行模式"神用编辑器之神".
警告,StevePurcell和我默认都启用了Vim的快捷键,假设你不习惯的话,能够打开~/.emacs.d/init.el,将当中对应的一行凝视掉,详细凝视哪一行请參考README.
Emacs的快捷键是经过几十年考验相当高效的,我建议你在未成为高手前还是学习Emacs的默认快捷键.
我建议你学习Emacs的第一年的原则应是,理解而不推断.
删除home文件夹下的.emacs、~/.emacs.d/init.el就是代替原来的.emacs.
比如,问:在.emacs.d中的init.el文件起什么作用?答:google"emacswikiinit.el".
假设排除了以上原因.又一次启动emacs,带上"–debug-init"參数,然后将显示的错误信息及环境报告到你所用的.emacs.d相应的开发人员#.
那么你就是走我懊悔莫及的老路,一个人在黑暗中摸索.开头兴致非常高,但现实是残酷的,碰到复杂问题解决不了.于是选择逃避,最好的借口是Emacs太复杂,放弃Emacs.
我终于醒悟过来,走上了光明大道,非常多走上岐路的人恐怕就没有这个觉悟和毅力了.
希望自己掌控坦率地说是一个非技术问题,由于没有自信心,所以有一种补偿心里.希望通过一种错误的方式来证明自己.结局无非是恶性循环.
正确地方法是放下身段至少一年(我已重复强调这一点),打好基本功,读书,虚心地向高手学习.
解决该问题须要的基本功非常easy:
Emacs是个开放平台,其众多插件release之前并不一定有严格的測试.所以插件之间可能有冲突.
这也是我为什么建议刚開始学习的人直接使用牛人配置的原因,由于牛人已经攻克了众多兼容性的问题,你仅仅要直接享受他的服务即可了.
即使你发觉了牛人尚未来得及处理的bug,最有效的方法是提交bug报告给牛人,而不是自己去钻研elisp.
须要对主要的命令行操作有一定的熟悉.关键知识点有两个:
假设你不知道怎样在Windows下加入改动环境变量,不知道怎样安装第三方工具,建议还是先用cygwin中的Emacs,由于cygwin已自带某些工具,没有的话,安装也和方便.且在cygwin下环境变量HOME默认已有.
这个差距说究竟是后端语法解析引擎的问题.坦率地说通常人们问我这个问题都是以微软的VisualStudio和Eclipse作为參照对象的.
就C++来说眼下有使用苹果公司的clang的方案,效果还不错.就Java来说,有使用eclipse做为后端引擎的方案.详细使用什么Emacs插件来调用这些引擎有非常多选择,不展开了.
实战中,我通常就是使用ctags或者etags作为后端引擎,因其全部语言通吃.尽管解析效果差一点,可是通过我遵循恰当的命名规范,对编程效率没有什么影响.
使用ctags或者etags还能够帮助菜鸟程序猿改掉一个非常严重的毛病.菜鸟由于缺乏自信心和经验,所以变量和函数名的命名通常都过于通用,给自己是架构师在写一个大型的通用Framework的幻觉.这对于真实的产品研发来说是一个非常严重的问题,想象你要改动某个接口的全部调用,定义,文档和測试案例,而且这个接口在多个语言中都有使用.这个接口假设有一个通用的名字如list,是会把维护人员气死的(我以前碰到过一朵奇葩,他还有喜把变量名和函数名叫全然一样名字的"好习惯").叫ListMySpecificService则好的多.使用ctags/etags这类比較弱的解析引擎就会逼你起一个不那么普通的名字.
假设ctags已不能满足你的需求,你能够考虑用cscope或者GnuGlobal(gtags).
以上我讨论的都是后端引擎的问题.
请启动Emacs后,执行`M-xpackage-refresh-contents`以从server更新最新的软件索引,然后重新启动Emacs就可以.
比如,
否.但EmacsLisp是非常强大的语言,其特点是一切皆可改动.当我说"一切"的时候,我就是指字面意义上的"一切",并非修辞上的夸张.
我用过很多编辑器,除了Emacs外,没有一个能做到"一切都可改动"这点.vi也不行.
所以学点Lisp对于你提高Emacs的使用水平没什么坏处.另外Lisp是种不错的语言,假设你的职业是IT的话,Lisp值得一学.
顺便说一下,Lisp是种非常easy的学的语言,比VBeasy多了,一旦你适应其语法后,就会发觉它事实上对程序猿蛮友好的,至少少打非常多字.
否,仅仅会起阻碍作用!
Lisp语法和通常的编程语言有些不同,除非有相当编程经验(至少10年),一般人刚開始都会对其有语法有一点点负面情绪(当然都是毫无道理的偏见).我的意见是学习不论什么新东西,长期来说兴趣是最重要的.一開始就应该避免不论什么会消减兴趣的不论什么负面情绪.
參考前文关于找到切入点的一节,我推荐的学习Lisp的顺序是,先使用优秀的Emacs配置享受到Emacs的优点,有了兴趣后学习EmacsLisp就水到渠成了.
关键是你打算用Emacs这个强大的瑞士军刀做什么.
我在前文中已经强调过以兴趣和解决实际问题作为切入点.
再举一些我自己的样例说明:
我非常赞赏这个理念.可是不要走火入魔.Emacs本质是个平台,给Geek们提供了无限的可能性.
可是从有用角度讲,Emacs和其它工具结合有时候能更快完毕工作(只是菜鸟在没有一年的修炼之前千万不要猜Emacs*不能*做什么).
下面是我觉得不一定Emacs可以吃独食的地方:
所以重点是保持头脑灵活,坚信Emacs无所不能的同一时候也要适当变通一下.
我不会回答Emacs配置的详细问题,由于假设你通读本文,应该知道哪里找答案更好.
在本文结束时,我再强调一下本文最重要的观点.
要点是:
关键是你以严肃的态度把其当作专业技能学习.非常多人之所以不赞同我的核心观点可能是由于在他们的内心深处还是有把Emacs用来炫耀"我有多酷"的意识.
Emacs当然非常强大,能够作为一种另类娱乐工具来博得眼球.可是它的本质是为专业人士使用的神器.
让我打个例如,职业杀手对于杀人的刀仅仅关心两件事:
刀的装饰是否美丽或者用刀技巧是否是自己原创的对职业杀手并不重要.
Emacs就是那把刀.
假设有不论什么疑问,请在以上网址报bug.这比Email要快.因GitHub会以邮件通知我,GitHub邮件永远归类至我的最优先目录下.
假设直接给我发Email,就会淹没于垃圾邮件中.
Emacs本质上是一个社区和平台,不断有新的有趣的人和技术出现.我会定期更新本文.