我的vim史
我是一个vim编辑器的重度用户,使用vim已经十年有余。从日常记录文本、开发到远程服务器的运维,它一直是我必备的工具。我有自己的一套配置,裸用vim也不在话下。
我在很久之前接触lisp,并为之倾倒。从来没有哪一门语言的外在表现可以如此完美统一,我相信一门编程语言的设计是完全可以塑造一个人的思维。谈及lisp,几乎毫无疑问谈到emacs编辑器。
这里顺带谈一个我对emacs设计理念的理解,emacs在我看来是lisp精神的一个很完美的体现(并不是说emacs完美)。emacs使用了20%的c语言代码,实现了一个lisp解释器,然后使用其余80%的代码,在lisp上构造了整个编辑器。所有的操作都对应着lisp函数,使得所有操作都是清晰和可查的。比如我想查找<C-x> <C-f>
的实现函数和具体实现,只需要<C-h> k <C-x> <C-f>
就可以了。
在可查的历史里,我曾经尝试N次从vim到emacs的转变,但是最终都以失败告终。
后来,一个偶然的机会,遇到spacemacs,让我再一次经历了转变失败的过程。
spacemacs是啥
不要问我是啥偶然的机会,因为我自己也已经记不得了。
spacemacs的官网是http://spacemacs.org/,通过作者的精心包装,从命名到完善的文档,使得它看上去更像一个完整的emacs发行版。但是其它,它的本质是另一份emacs配置。
是的,它是另一份emacs配置,就像https://github.com/上其它人托管的.emacs一样。
官方对它的介绍是,”A community-driven Emacs distribution”,一个社区驱动的emacs发行版。
spacemacs为什么这么吸引我
如果你也是一个vim重度用户,并尝试从vim转到emacs阵营,你就会像我一样首先被它的操作模式吸引。spacemacs默认集成了evil,使得在操作习惯上像是一个lisp配置的vim。
当然,对我来说它还有另一个致命的吸引力,那就是华丽丽的外表。默认是一个紫色的本色方案(基佬紫),非常漂亮美观。可以看下面官方的图片:
下面说一下官方宣传的优点:
我们知道使用emacs的用户,有一些患上了RSI,spacemacs通过集成evil,并将<leader>
绑定到space来解决这个问题。由于space键主要使用拇指按压,所以大大减轻了手指的负担。
spacemacs通过使用助词符前缀,将各个功能对应绑定到各个按键。比如buffer操作绑定到b,help绑定到h。也就是说,buffer对应的操作按键是<space> b ...
,并且每一个按键都会有功能提示,交互性也得到了一定保证。可以参考图片。整体上很连贯一致。
spacemacs引入了一个layer的概念,使用某一个功能实际上是添加某个layer,这样就把具体的功能跟第三方包解耦,我们只需要知道自己想要的功能,而不需要知道这个功能需要安装哪些包。这可以说是脱离折腾苦海的一个绝妙的办法,把折腾的成本交给社区。
spacemacs默认集成了100多个包,从编辑到cvs管理,功能涉及到方方页面,几乎将emacs包装成了一个简单易用且全面的系统。而且会根据打开的文件类型动态提醒添加的包,完成一站式体验(类似vscode等的包安装提醒)。
当然,还有一些其它的优势,让我在emacs的体验上走得更远。整整试用了两天时间。
两天的体验之旅
在使用spacemacs的这两天里,我发现了很多更优秀的工作流。
举个例子,项目内的批量替换,spacemacs使用插件使得整个过程更加流畅,首先项目搜索某个关键字,然后在交互环境里整体替换就可以了。
当然,有一个难以逃避的弊端,应该归给emacs的设计。那就是buffer的管理相当混乱,甚至使用git都要打开n个buffer,导致有很大的成本耗在查找和切换buffer上。
关于emacs的缺点,可以参考https://www.v2ex.com/t/332566,个人感觉总结的很到位。
放弃spacemacs
最终我决定放弃spacemacs,我发现它并不是我要找的圣杯。
首先,它过于臃肿。我指的臃肿并不是指其他人说的反应慢,而是它有太多不重要的功能,占用了过多的键位,导致看似设计优良的<space>
操作方式,一个简单的功能都藏到很深的地方,比如describe-function
被绑定到了SPC h d f
,甚至很多时候都记不得某个功能对应的按键序列,需要根据交互提醒找到对应按键。当然,这些按键都是可以重新定义的,但是由于设计它耗费了社区很大精力,修改这样的默认按键就显得更加吃力。不知道修改后它还能不能叫做spacemacs了。
其次,之前谈到的,buffer过多难以维护,严重影响思维逻辑。
接下来
你现在看到的这篇文章,是我用emacs写成的。没错,我成功的转到了emacs,使用着我之前使用的vim键位绑定,甚至有一些比以前更好的解决方案。这要归功于spacemacs,它让我看到了自己之前存在的问题。
spacemacs还是会有大批人在使用的,这印证了一个事实,一个高度可配置的编辑器,仍然可以存在一份可以供一群人使用的通用配置。但这并不能发挥可高度定制这个杀手锏,甚至会阻碍你做过多的配置。
正如我使用vim的经历一样,现在这份emacs配置是我自己从零开始配置的,这是完全属于我自己的配置,并且不能被其它人使用。
而且,转换的成功有赖于我另一个努力,那就是努力不使用过多的功能。emacs的功能多到眼花,可能有一些功能这辈子都用不到,而且还会创建过多buffer,导致陷入之前的场景,没法继续使用下去。只使用自己需要的部分功能,就可以熟悉它对buffer的操作,让整个使用过程不会膨胀到自己的控制之外。
结
就写这么多吧,思维逻辑比较混乱,本来这件事也有点混乱,刚好了。