一、Spacemacs简介
1.用什么编辑器来编码
编辑器作为程序员每天都要用的生产力工具,一个好用的编辑器对工作效率有很大的提升,主流的编辑器有Visual Studio/Sublime/VS Code/JetBrains系列等等,但是今天要聊聊小众的编辑器:Vim和Emacs,两个历史悠久的编辑器。
为什么Vim和Emacs作为诞生了40年之久的编辑器,到今天还有这么旺盛的生命力,并且有一大批死忠呢?
Vim和Emacs有什么优势?
- 跨平台,无需界面支持,可以运行在Linux服务器上,也可以借此搭建远程办公环境。
- 几乎支持所有编程语言,学会一个编辑器,在做任何程序开发时都适用。
- 纯键盘操作,完全可以抛弃鼠标,这种沉浸式的输入体验,注意力可以更专注,输入速度更快。
- Vim的多模式转换,Emacs的组合键命令,熟练掌握会比IDE有更高的输入效率,运指如飞,这也是用Vim/Emacs最重要的原因。(这里写输入可能不太准确,程序员只有小部分时间在输入,更多的时间是编辑、调整和浏览代码,而Vim和Emacs正是大大提高了这部分操作的效率)
谁适合学Vim和Emacs?
- 虽然对自己用的编辑器已经熟练掌握,但是总会有输入跟不上思路的感觉。
- 如果你想追求极致的编码效率。
学Vim和Emacs有什么要求?
- 要能熟练用键盘盲打,否则用Vim/Emacs只会是个负担。
- 有耐心,有毅力学习新的技术。
初学编程的时候,很多人会在论坛发帖“求推荐好用的编辑器”,回帖会有某位“大神”留下“Vim”三个字。于是你兴致勃勃地下载来Vim,打开一看,界面怎么这么丑,算了忍忍,打开个文件试试好不好用。怎么没有代码着色?怎么不能打字?怎么没有代码提示?带着一堆不解愤怒地删掉Vim,心里咒骂着那个推荐Vim的人,并打算这辈子再也不碰这东西了。
编辑器学习曲线这是一张流传得很广的编辑器学习曲线图,看到vi和emacs的学习曲线,想学Vim和Emacs的人大概也会被吓走吧。
但是千万千万不要被误导,Vim和Emacs找对方法还是很容易上手的。
所以说怎样才是正确的学习方式呢?
我的建议是:下载编辑器,使用其他人分享的成熟的配置,开始练习输入方式和各种快捷键。等对编辑器有了足够的了解再去研究配置的细节,定制自己专属的配置。
2.Vim or Emacs?
Vim被誉为“编辑器之神”,Emacs被称为“神之编辑器”,它们都是很优秀的编辑器,但是核心理念又大相径庭:Vim追求极简,只做编辑器该做的,而Emacs越做越庞大,被称作伪装成编辑器的操作系统。可能正是这个原因,才让Vim和Emacs水火不相容。
作为操作系统的Emacs
那么该学Vim还是Emacs呢?
Vim和Emacs最大的区别在于输入方式和快捷键,对于大部分人来说,Emacs更容易上手,因为输入和普通编辑器没区别,只是有很多自己特殊的快捷键。而Vim的区别就大很多,最常用的普通模式,刚上手时是完全摸不着头脑的。是学Vim还是Emacs?可以分别尝试一下,找到适合自己的输入方式最重要。
在试过Vim以后,我完全被这种输入的方式吸引了,它的指令就像是构建了一套让你可以和编辑器对话的语言,它能很聪明地理解你要它做什么。
daw指令daw(助记:delete a word — 删除一个单词)
Vim:知道了,搞定!
di"指令di" (助记:delete inner "" — 删掉引号里的内容)
Vim:很容易!
简单敲下三个按键就可以完成其他编辑器需要几倍或者十几倍的操作才能完成的事情,Vim这种交互方式,用的时间越久,积累的技巧就越多,效率就越高。
所以后面的内容也会基于Vim的方式展开。
3.Vim and Emacs?
我应该是Vim的忠实用户了,各种项目都用Vim来开发,后来接触了一个比较庞大的项目突然出问题了。
Vim的单线程,不支持异步调用,导致在调用插件时编辑器处于阻塞的状态,只能等其他任务完成才能继续编辑(后来的Vim 8添加了异步的特性)。在这个比较大的项目里,代码提示、项目编译等的时间越来越长,慢慢变得难以忍受。查了很多资料,查到了两个替代方案,一个是换用NeoVim,另外一个是Spacemacs。NeoVim是Vim的一个分支,它支持异步调用。
Spacemacs则不太一样,居然是Emacs?但是看到Spacemacs官网的一句话简介,便立即被吸引。
The best editor is neither Emacs nor Vim, it's Emacs and Vim!
Emacs and Vim,有点意思,我决定尝试一下。
4.Spacemacs是什么
Spacemacs官网:http://spacemacs.org/
Github:https://github.com/syl20bnr/spacemacs
Spacemacs是由社区驱动的一套Emacs配置,同时支持Vim和Emacs两种模式,叫Spacemacs是因为它用Space键作为了编辑器的Leader键。这套Emacs配置简单易用、高效又美观,独特的Layer概念也是它一大特点。
Layer可以理解为一个插件集合,当我们配置一个编辑器来支持开发某种编程语言时,通常是需要配置多个功能插件的,语法支持、代码补全、文档、语法纠错等等,并且可能其中单单某一个插件的配置就已经非常繁琐,比如Vim的代码补全插件“YouCompleteMe”。Layer的存在大大简化了插件的配置,要写Go语言,在Spacemacs的Layers配置项加上"go",编辑器就会自动下载开发Go语言所需要的插件,重启编辑器就能开发Go语言了,这样的设计简直不要太舒心。
这种设计理念太受欢迎了,以至于现在还有了SpaceVim项目。
题外话,Spacemacs实现Vim输入方式用的插件叫Evil,Emacs + Vim = Evil,这款把水火不相容的Emacs和Vim融合在一起的插件叫“邪恶”,真的是神来之笔。
后面会结合Vim讲一些Spacemacs的使用,Vim不会讲很深,想系统学Vim的不妨看下这本书《Vim实用技巧》。