本文的目的并不是介绍spacevim的使用方法, 讲spacevim最清楚的地方是它的文档. 本文的目的在于:
- 解释它和vim的区别, 它的优势, 这样你可以考虑要不要使用spacevim. 即使你此前没有很多vim经验, 也值得一读. 因为后文会解释, 它的一大特点就是容易上手.
- 如何能同时使用vim/neovim和spacevim. 这一点适合, 对于刚装了spacevim, 却发现原来的vim/neovim配置文件不起作用的读者
spacevim是什么? 与vim有何不同?
spacevim与vim/neovim的关系不同于neovim和vim的关系. neovim是对vim的重新实现(可能是比refactor更彻底一些的refactor), 两者是独立的, 不过neovim一边支持lua, 一边兼容vimscript, 所以vim的几乎所有插件, neovim也可以用.
spacevim不是对vim/neovim的实现, 而是在vim/neovim之上整合了很多好用的插件. 要知道vim/neovim之所以那么好用, 有大量好用的插件是非常重要的原因.
spacevim有个重要概念叫layer, 其实是若干个提供相似互补功能的插件的整合, 并且以key mapping(就是快捷键)的形式对用户提供使用接口. 它对vim很多现有插件进行整合, 封装, 当然它自己也写了很多vimscript, 本质上是个超级插件, 所以vim本来的所有用法, 还是可以用. 也就是说, 用它而不是vim/neovim, 也不会有任何损失.
spacevim的层是什么意思?
为什么叫层? 学计算机的同学可能有这样的体会, 计算机无处不分层. 每一层隐藏细节, 向上一层提供简单的接口. spacevim的layer就是如此, 每个插件可能本来有很多可配置项, 有很多mapping, 但是spacevim整合之后, 做了比较好的设置, 用户就不再需要设置这些插件, 这就是隐藏细节. 插件本来可以设置key mapping, spacevim设置好了比较容易记的mapping. 这样用户不需要自己设置, 记住spacevim的设置就行了(其实不需要记住, 因为spacevim有提示).
用spacevim到底有什么好处?
- 整合了很多成熟好用的插件(也还是有相当可能有bug), 用户不必再花时间寻找插件. 你只要用spacevim, 就能有很好的工作流. 举个小例子, vim的tab功能很强大. 但怎么对tab重命名? 我之前苦苦寻找, 发现了taboo这个插件, 是我使用频率最高的几个插件之一. 但是spacevim的tab manager就有重命名的功能, 而且还更美观. 这样的例子还非常多, 比如file tree, tag bar.
- 如果想让vim作为某门语言的简易IDE, 又需要花时间找插件, 试错, 磨合. 但是spacevim已经把很多常用语言c/c++/java/rust/python/r的优质插件封装为层, 相比自己去找可以算是开箱即用. 省去很多时间.
- 对于vim的新手, 优势更明显. 记不住快捷键, spacevim有快捷键提示功能, 也就是按下一个键停顿一会儿, 就会显示提示. 更重要的是, 如果vim/neovim没有好的配置(vimrc/init.vim), 并不好用, 用上去体验大概还不如vscode, 但是spacevim已经封装好比较好用的配置. 这样不需要做任何配置就能有不错的用户体验, 需要进一步配置再去学.
如果有读者问: 那我为什么不继续用vscode? 它比vscode有什么好处呢? 我不会javascript, 用vscode不能改插件, 而且vscode占的空间大(尤其是插件), 所以我没用vscode. vim相比vscode有这些优势:
- 窗口, tab更灵活, 可以每一个tab都有不同的工作路径, 每个tab还可以起名字.
- vimscript简单(因为我不会javascript), 可以用几行代码就有很方便的效果. 而且再小的动作都可以配上命令或宏或者mapping.
如果你觉得不需要, 那确实也没必要换, 因为vim的学习成本不小, 我在vim上花了很多时间, 也没有到能想写插件就写插件, 或者想改插件就改插件的水平.
无图无真相,只是修改了一下background(默认dark, 改成了light).
有文件浏览器, 有终端:
再来张mapping提示的图:
如果装了spacevim, 发现原来的vim配置用不了了怎么办?
其实spacevim是对原配置文件重命名. ls -a | grep vimrc就会找到重命名后的文件名. ~/.vimrc是spacevim提供的配置文件, 是symlink, 直接删除即可. neovim也是同理, 删除spacevim提供的init.vim, 再恢复原本的文件名. 然后用nvim -u ~/.SpaceVim/init.vim
即可启动spacevim. 我是写了简单的bash函数.
svim ()
{
nvim -u ~/.SpaceVim/init.vim
}