space-vim:終極 vim 配置
Quick Install
-
curl
sh -c "$(curl -fsSL https://raw.githubusercontent.com/liuchengxu/space-vim/master/install.sh)"
-
wget
sh -c "$(wget -qO- https://raw.githubusercontent.com/liuchengxu/space-vim/master/install.sh)"
初衷
spacemacs 可能已經成為 emacs 社區中 “唯我獨尊”的配置,在 github 上有近萬的 star, contributor 眾多。它的 “社區驅動” (community-driven) 真的是很 “耐力持久”,貢獻的人很多,UI 很漂亮,功能也很強大。作為 emacs 長久以來的對家 vim, 如果也能有一個這樣一個社區驅動的配置,相信也會給大家帶來很多便利。
正如 spacemacs 所稱,“The best editor is neither Emacs nor Vim, it's Emacs and Vim!”, 最好的編輯器既不是 Emacs 也不是 Vim, 而是 Emacs 和 Vim! 所以不管是從實用角度,還是從設計概念,操作哲學的角度,這兩個都是非常值得學習的。此外,“編輯器”始終是編輯器,取代不了 IDE,因為吸引我們的更多是深入其中的過程。
就我自身的使用而言,GUI 環境下我會選擇 spacemacs, 但是終端環境下 vim 依然是我的首選。我希望盡量保持這兩個環境下操作的一致性。此外,vim 社區中,雖有spf13-vim,k-vim 等一些比較有名的 vim 配置,但始終整合的不夠,散落著很多適用特定環境的很好的配置,比如針對 c-c++, python, ruby 等等不同語言環境。還有大多也不夠漂亮(當然了,這個有點主觀,但不管怎么說,年輕人就是要挑“好看”的-_-)。
隨著 vim8 的升級,會有很多新的更好的插件誕生,比如我用來替代syntastic 的ale, ale 使用了異步特性,再也不用因為語法檢查而拖慢速度了。還有asyncrun.vim 等等,都會成為我們新的選擇。 spf13-vim 等的更新似乎不太跟得上步伐,希望集體智慧能夠給我們帶來一個更好用的 vim 配置。
愿景
集百家之長,惠千家萬家。
概覽
名詞解釋
space-vim 既然是從 spacemacs 啟發而來,自然借鑒了非常多的東西,其中最重要的一個概念便是 “Layer”.
Layer
space-vim 目前實現了 Layer 的概念, 就像這樣:
call LayersBegin() Layer 'fzf' Layer 'emoji' Layer 'colors' Layer 'python' Layer 'markdown' Layer 'syntax-checking' call LayersEnd()
在 space-vim 中,所謂的一個 Layer ,其實很簡單,就是集成了一些相關的 vim 插件及其配置,涉及到兩個文件: config.vim 與 packages.vim. 不難理解,config.vim 為該 Layer 的相關配置信息,packages.vim 則為該 Layer 所需的一些 vim 插件。
比如 Layer better-defaults, packages.vim 中的插件有:
Plug 'liuchengxu/vim-better-default' Plug 'SirVer/ultisnips' Plug 'honza/vim-snippets' Plug 'Raimondi/delimitMate' Plug 'tpope/vim-surround' Plug 'easymotion/vim-easymotion' Plug 'mhinz/vim-startify' Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } Plug 'Xuyuanp/nerdtree-git-plugin', { 'on': 'NERDTreeToggle' } Plug 'tiagofumo/vim-nerdtree-syntax-highlight', { 'on': 'NERDTreeToggle' } Plug 'bronson/vim-trailing-whitespace', { 'on': 'FixWhitespace' }
調整,增加 Layer 都非常方便, 這也為 “集百家之長” 提供了土壤。
.spacevim
這個對應的是 .spacemacs, 用戶可以自己決定啟用哪些 Layer, 可以加載 space-vim 中沒有的插件. 首次安裝 space-vim 時,.spacevim 會在當前用戶目錄默認生成,其中主要有兩個函數:
" Put layers you want to enable as well as extra private plugins function! UserInit() " Space has been set as the default leader key, " if you want to change it, uncomment and set it here. " let g:spacevim_leader = "<\Space>" " let g:spacevim_localleader = ',' " Put the layers you want to enable Layer 'fzf' " Put private plugins Plug 'junegunn/vim-github-dashboard' endfunction " Customize configuration function! UserConfig() color space-vim-dark endfunction
LayerStatus 可以查看啟用了哪些 Layer.
如何使用
更多使用信息請點擊快速指引, 下面為簡短介紹。
個人配置文件為 .spacevim , 如果沒有 .spacevim , 那么 space-vim 僅會加載默認的 Layer. .space-vim 中定義了兩個函數分別用于加載 Layer 與個人配置信息。
function! UserInit() Layer 'fzf' Layer 'ycmd' Layer 'syntax-checking' Layer 'emoji' Layer 'goyo' Layer 'html' Layer 'python' Layer 'markdown' Layer 'c-c++' " 加載 space-vim Layer中沒有的插件 Plug 'tpope/vim-fugitive' Plug 'junegunn/vim-github-dashboard' endfunction function! UserConfig() color gruvbox endfunction
更多使用信息可以查看 Layer 目錄下對應的 README, 當然了目前還比較粗糙,如果 README 不夠詳盡,還得要 查看 config.vim 和 packages.vim.
此外, private 可以看做是一個 Layer ,如果個人配置比較多,可以放在這里, private 目錄可以有 Layer 的兩個 "標準" 文件, space-vim 也會進行加載:
- packages.vim
- config.vim
如何更新
進入 ~/.space-vim , 執行 git pull 即可.
如何貢獻
- 完善,增加 Layer. 遵循已有的 Layer 結構。
- 文檔,包括安裝細節,使用經驗等。
展望
- 目前還沒有在 Windows 下測試,實現了僅 Layer 的按需加載,后續應當還支持一些選項的設置,比如同類插件選擇哪一個.
- 很多文檔工作。 對于初學者而言,文檔可能比什么都重要,裝了一些插件不是什么難事,重要的是學會使用這些插件,發揮其功效 。
- ......
一個人的精力始終是有限的,非常歡迎大家分享自己的使用經驗。三個臭皮匠還賽過諸葛亮呢,還不行? 那就四個:p。
當然啦,可能很多人覺得 vimscript 沒有 lisp 那么有表現力,稍顯蹩腳。Anyway, 都是工具,樂趣而已。如果能夠集思廣益,也是利己利人。