天天看点

我也说说Emacs吧(2) - Emacs其实就是函数的组合Emacs本质上是函数的组合

vim和sublime text等编辑器,本质上是一个编辑器。

比如我们看看vim的帮助,是这个风格的,比如我要看i命令的帮助:

再看看emacs的帮助,是这样的风格,比如我们看ctrl-n键的帮助:

更进一步,我们可以点击simple.el进去看看,可以看到它的源码:

从上面可以看到,比起vim是个相对黑盒,需要文档描述的编辑器,emacs是个比较简单直接的家伙。简单到,基本上就是一堆函数的组合而己,我们做编辑时,就是直接调用这些函数。为了方便,我们把这些函数绑定到快捷键上。

只要知道要调用哪个函数,不想记任何快捷键的话,只需要记住一个就可以了,就是alt+x,然后就可以输入要执行的函数名,去执行这个命令。

emacs的功能,都是由lisp或c语言实现的函数来实现的,所有的源码都是开放的,在新的版本中,直接都可以通过帮助功能来查看,非常方便。

在emacs里,alt键的命令也都可以通过先按esc再按另一个键的方式来实现。

emacs是第一个著名的以可扩展能力而闻名的编辑器,同时期的主流编辑器在这方面都要向emacs学习。到了现在,sublime text和vim等编辑器的扩展功能也是非常值得称道而且受欢迎的。

但是,不管是vim还是sublime text,甚至更强大一些的visual studio code和atom,它们的做法都是把扩展的接口开放出来,大家按照开放出来的接口来写扩展。

比如我们先看vim,以我在mac os下的vim 8.0.600为例,它支持下列feature:

带加号的是我装的vim支持的功能,减号为不支持。从中可以看到,我用的这个版本的vim支持:python,ruby,perl三种语言,而不支持python3,tcl和lua语言来写扩展。

比如我们看一个vim扩展的官方例子:

在vimscript中,通过exe命令可以执行vim本身的命令。

反正是调用api接口么,那么可以支持很多语言了。

比如可以通过:pe perl脚本的方式,直接执行perl语句。可以通过:help :perl查看:

perl语言写vim插件例:

常用的perl可调用接口有:

类似的,:py可以调用python语言,:rub可以使用ruby语言.

使用python的例子:

python调用vim命令的例子:

调用python文件,可以通过:pyfile或:pyf命令调用。

ruby语言写vim插件的例子:

ruby调用vim接口的示例:

再来一个lua语言的:

tcl语言的:

atom的扩展的主力语言是coffeescript。

visual studio code的插件可以用javascript或者typescript来开发。

下面是个空的typescript的例子:

sublime text的扩展是用python写的,举个处理回车换行的例子:

emacs与以上的编辑器的最大不同的就是,无所谓扩展了,哪块看不顺眼就直接改了就是了。反正大部分都是绑定到快捷键上的函数而己。

比如,学习emacs的教程中,最开始讲的函数就是find-file,它的作用是打开文件,绑定在c-x c-f键上。水木社区官方qq群进群问题就是问c-x c-f的作用是什么。

emacs的好处是没有秘密,我们直接看源码,看看它是做啥的:

这么基础的命令,在其它编辑器中,一般没人改吧。但是在spacemacs中,c-x c-f就默认绑定ido-find-file函数上了。

ido是emacs的一个插件,意思是『interactive do』,在交互式操作方式上对基础的emacs功能上有所增强。

即使在相对古老的emacs 23.x版本上,ido插件也是官方发布版本中的一部分。只不过官方版本上的键绑定还是绑到基础命令上。我们可以选择绑一个键给它,也可以通过alt-x来运行它。

后面学习emacs的功能的时候,我们都会讲,标准emacs是如何做的,spacemancs是如何做的。大家可以看到,有很多标准emacs绑定的快捷键,在spacemacs上根本就不灵了,被绑定到别的功能上了。

所以,与其记快捷键,不如记函数名吧。也不用太精确,输的时候能找到就行。查帮助时会提升它绑到哪个键上,或者记不住就自己绑一个喜欢的也可以。

个人觉得,emacs的文档确实不如vim的文档写得好。但是,emacs的文档也仍然是非常丰富的,实在查不到,咱还可以直接看代码。

既然我们已经了解到emacs就是一堆函数的组合,那么提供帮助功能,肯定也是调用相应的函数了。没错,正是这样!

如果想完整地阅读手册,可以调用info函数,默认绑定在c-h i组合上。

我也说说Emacs吧(2) - Emacs其实就是函数的组合Emacs本质上是函数的组合

如果看到手册或者书上有讲一个快捷键是做什么的,我们可以查找它所对应的函数。查找一个按键的定义:c-h k (describe-key):比如我们就可以查查c-h k对应的功能:

从帮助中我们可以看到,快捷键绑到c-h k,而实际调用的函数是describe-key.

同样,我们还可以通过c-h f (describe-function)来查询一个函数的功能。

另外,还有查询变量的describe-variable函数,绑定到c-h v键上。

emacs的基本用法,就是调用一些函数而己。这些函数可以通过alt-x加上函数名去调用。

常用函数可以绑定到一些快捷键上。很多emacs入门教程讲的就是这些功能的用法

info用于在emacs中查看手册, describe-funciton查找函数用法,对于lisp函数经常可以直达源码。describe-key查找键值绑定。它们默认的绑定是c-h i, c-h f和c-h k。在以后的emacs岁月里,您会经常用到它们的