×

Emacs喜欢神器

96
mukhali
2016.03.11 20:17* 字数 1007

0x00 引言

Emacs有三大杀器:Emacs、Org、Magit。函数式编程真的很喜欢,抽象程度很爽。从Emacs能看到很多东西,或许我以后可以为此编写一本书吧?

0x01 Emacs

Emacs 诞生于函数式编程的热潮中,在Emacs中传承者MIT的Lisp Machine的理想。关于Lisp Machine你需要 去学习Lambda Calculus的内容。可能你敬佩图灵,但我更敬佩Church。Church是图灵在普林斯顿大学攻取博士学位的导师。Lambda Calculus就是由Church提出来的。我喜欢基于Lambda Calculus的Lisp系语言,其实对于初学者来说,从Lisp系走进编程世界是最优美的姿势。这个世界有很多庸人,却自以为是导师,踏着学生的血肉,养活了自己的房产。

Emacs是由从MIT出来的,提倡free software运动的Richard Stallman博士依据一个闭源软件开发出来的。Emacs 中有很多特别的东西,这些东西在IT人员以后的手工生涯中都能用上的:分层设计、内存回收机制、hook机制、代码注释。

分层设计

虚拟机最先出现在函数式编程语言中,Java语言和.NET平台的虚拟机是后来很久之后才从函数式编程世界中借鉴过来的。来自于MIT的Emacs也有一个虚拟机——Emacs VM。这个虚拟机采用C语言编写,在其上层开发出了Emacs Lisp语言,可以用Emacs Lisp语言来写扩展。从现在的角度来看提供扩展功能是一个伟大而优美的设计,但提供扩展的方式有很多,这种直接开发出一种专有的编程语言未必是最好的方法。

建立在Emacs VM上的Emacs Lisp语言有两种文件:.el和.elc文件。在下面的介绍中,我将Emacs Lisp和Java做对比。.el文件是一种纯文本文件,相当于Java编程语言的.java文件;.elc文件是一种字节码文件,相当于Java中的.class文件。当你为Emacs写插件的时候,你可以将.el文件编译为.elc字节码格式来提高插件的反应速度。

如果你理解到这种分层方法的优美,那么以后你在开发系统的时候如果采用了分层设计的话,你会深深的被你那优美的设计所折服。

内存回收机制

在Emacs中,你可以在加载文件中通过变量gc-cons-threshold来设置启动回收机制的时间。

(setq gc-cons-threshold 100000000)

关于有自动回收机制好,还是手工回收机制好,这是一场战争。

hook机制

如果你用过Javascript或者Node.js你会体会到这个真的很爽啦。

代码注释

如果你写Emacs Lisp,你会养成写注释的习惯。Emacs的这个妙处,当你用过C-h的时候,你会喜欢上玩它。

0x02 Org

Org在Emacs的世界中有好几个指代,可以指Org插件,可以指Org文件格式。在这里如果指Org内置的插件,本文将用Org插件来表示,如果指Org文件格式的话,本文将用Org文件来表示。

Literate Programming

如果你曾经看过Knuth的书,你会觉得这个文化编程的概念很高大上,当你在Emacs里进行文化编程的时候你会发现真的很爽。用这个你会爱上写文档的,在代码中写文档。

TODO 管理


Paste_Image.png

0x03 Magit

执行git status:


Paste_Image.png

然后可以在这里面进行你常用的Git操作了,感觉比tig好用多了。

0x04 随感

如果Emacs从一开始就用GNU Guile 来写的话,他的用户会更好玩。GNU Guile可是为了GNU系统专门开发的插件语言。

如果你能读懂的话,那么你会看到很多很多。

0x05 UPDATE

2016-04-20
一些小工具
Web note ad 1