本文的目的並不是介紹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
}
評論區的朋友補充對於vim是vim -u ~/.SpaceVim/vimrc
. 感謝補充!