EMACS-DOCUMENT

=============>集思广益

作为2016年的开发者,你需要学习Emacs(或者Vi)

如何提升你写代码的效率并且强迫你仔细思考.

本文并不是关于Emacs与Vi论战的文章. 我主要是想解释为什么(深入)学习一个低层的文本编辑器对任何软件工程师来说都应该是最重要的事情. 我个人喜欢Emacs因为我觉得它常用的快捷键(common shortcuts)比较容易记忆. 但是随后你会发现,其实选择哪个编辑器无所谓,只需要去学去用就行了.

像Emacs这种编辑器看起来很古老,但是却很有效率. 它的快捷键的设定充分考虑到了你的手放在键盘上的位置,以及最常用的那些键是哪些,并据此做了优化. 这些编辑器能让你以难以想象的效率完成工作,同时它们还强制你去思考自己在做的事情. 它们不仅让你变更更有效率, 它们还让你理解你在做的事情而不仅仅是无脑的写写代码(writing code with crappy CRLF).

1 熟悉你的工作环境.

我发现软件/网页应用开发人员常常愿意花时间去熟悉他们所使用的编程语言与框架. 这当然很好. 这会让你随着时间的推移而越来越有效率. 但是, 有些情况下, 仅仅在开发环境开发新的功能还远远不够. 你越熟悉软件代码,你越能够设计,编码并为产品添加进更多的功能. 然而,大多数时候,事不如人所愿.总会有各种各样的管理或技术上的原因导致你无法为产品增加功能. 很明显,若你们公司的文化是只有那几个开发主管有权限为产品增加新的功能,你的开发过程将很受限(而你也许应该换份工作). 当然,大多数时候, 这并不是你无法为产品增加功能的原因. 大多数时候,只是因为你对生产环境不熟悉而造成不想在该生产环境下工作(或者其他人不想你工作..)

当然,熟悉工作环境不仅仅意味着熟悉MS Windows. 还意味着熟悉你的版本控制系统,熟悉你所使用的发布工具,掌握服务器配置(例如Apache或Nginx的配置),熟悉程序语言的配置,熟悉linux配置与Linux日志系统.

你应该知道的,所有这些工具的配置文件都是文本格式的,你常常需要直接登录到服务器上编辑他们. 在这种情况下, 你没有办法使用任何一款熟悉的带图形界面的文本编辑器. 这时只能使用Emacs或Vi了.

helm_projectile.gif

总之,若你像熟悉你的工作环境,你需要熟悉Emacs或Vi. 任何对你的Vagrant,Docker,Linux服务器以及工作环境中其他任何东西的的配置操作都需要打开一个文本文件然后编辑它. 大多数时候,甚至提交一个变更都会要求你使用非图形界面的文本编辑器来编辑提交信息.

若你想把事情做好,请学习使用Emacs或Vi.

2 提升你的能力以使自己变得很有影响力

作为一名软件工程师,影响力来源于你能否想出可扩展的解决方案,能否在很短的时间内找出解决问题的好方法,写出的代码是否具有可维护性,等等一系列的事情. 有一点可以确定,那就是找出聪明的解决方案依赖于你的大脑而不是你的键盘和鼠标. 这就是我的观点. 像Nano,Emacs,Vi这类非图形化文本编辑器开发于70年代. 当时轨迹球与鼠标尚未流行,因此当时所有的工作只能通过键盘来完成. 而这种无鼠标的哲学一直流传到了今天, Emacs 和 Vi 完全无需鼠标也能用,这就是它们的优势!

想一想. 你每天有多少次将手从键盘移动到鼠标或触控板? 的有上千次吧? 每次你将手从键盘移开到鼠标你都需要关注于光标所在的位置. 然后等操作完后,你还要把手放回键盘. 这些动作每个大约要花费半秒钟的时间吧. 那么让我们假设每次你使用完鼠标然后将手放回键盘要花一秒钟的时间. 这意味着你一天浪费了1000s(16分钟),一个月就是333分钟(5小时), 每年就是2天半.

作为一名程序员,这些时间你应该用来增强你的影响力而不是TMD用来寻找你屏幕上的光标的. 学习Emacs意味着要学习许多的快捷键,然后用这些快捷键去完成任何事情,例如搜索与替换,移动光标到函数的下一行,跳转到任意行,将光标移动到文件末尾,等操作. 学习Emacs会强迫你使用键盘而不是鼠标/触控板. 假以时日, 你会变得更有效率并且更加适应键盘操作. 很快你就不会再想使用鼠标了,你会强迫自己去学习所钟爱的图形化编辑器的常用快捷键了.

3 三思而后行.

你根本不在意一年省出那么两天半?还有其他好处呢.

使用新出的图形化文本编辑器和IDE很明智. 我个人也常常使用Atom 以及 PhpStorm. 它们提供了许多便利的功能例如可以很方便的在函数,类之间跳转,很方便的进行单元测试, 集成了版本控制系统, 预览markdown等. 而且虽然像Emacs和Vi这样的编辑器也能提供这些功能,但是你不得不花无数的时间来配置各式各样的插件. 然而使用鼠标去点击这些功能却并不明智. 在我看来最好的一个例子就是大多数图形化编辑器都会提供的树状文件视图.

在你的代码左边列出树状文件视图是一项蛮有用的功能,但仅限于当你根本不知道你要找的是那个文件时. 然而事实是,大多数时候,人们使用这种方式打开所有项目中的文件,即使他们其实知道要打开的文件地址. 这样,这些开发者(我的大多数同事)每次需要看其他文件的代码时,他们需要将手移动到鼠标,查看树状文件列表,点击目录,找到再找到要打开的文件. 你是不是经常这样干? 这意味着即使你的大脑已经知道了要找的代码存在哪个文件中,你依然需要浏览树状文件视图从中找到存放代码的文件. 这对我来说毫无意义.

Emacs与Vi并没有树状文件视图工具. 你需要使用快捷键和命令来打开新文件或buffer.大多数时候,这些编辑器都提供了文件路径自动补全功能,该功能允许你只输入一部分字符然后按下tab键就能找到要找的文件. 总之,由于需要输入要打开的文件名的开头几个字母,这就强迫你一直想着这个文件并将注意力一直放在你要寻找的东西上去. 这样你的注意力就不会被鼠标和树状文件视图面板所分手了. 这对你有好处,而且,我相信再用过一阵子类似 Projectile 这样的项目管理工具后, 你不会再想去用树状文件视图了.(我安装完Atom之后的第一件事情就是为切换显示树状文件视图功能添加一个快捷键)

再强调一遍, 认真想一下. 从树状文件视图种浏览并找到一个文件要花多长时间? 根据要找的文件是否靠近与当前编辑的文件,这个时间从5秒到10秒不等吧. 你一天又要打开多少次文件呢? 10次? 20次? 就假设是15次吧. 这样一天下来你要花2分钟来寻找那些你已经知道如何调用以及在哪里的东西. 一年下来那就是10个小时.

与其浪费时间在寻找那些你已经知道位置的文件上面,还不如停下来开始学习Emacs呢.

4 尝试它然后你会爱上它

Emacs还有其他优势,例如它可以打开像dump或日志这种巨大的文件,而Sublime和Atom打开这种巨大的文件会崩溃. 网络视图编辑器常常会有内存泄露的问题,而它没有这个问题. 你也很难对那些现代编辑器做出微调以极大地提高你的工作效率(例如,我就经常使用大量的Emacs插件).

而你最好去尝试一下它,我相信你很快就会爱上它的.

Emacs和Vi支持多平台. Windows, Mac OS 以及 Linux上都能使用.

  • 去Emacs官方站点找到适合你平台的Emacs版本.
  • 去EmacsRocks上观看一些视频入门.
  • 使用Melpa包管理器来添加一些插件.
  • 学习使用快捷键提升效率.

最后, 欢迎克隆我Github上的个人配置,该配置是偏向于网络开发的.