space-vim:終極 vim 配置

ox1110 8年前發布 | 43K 次閱讀 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, 都是工具,樂趣而已。如果能夠集思廣益,也是利己利人。

 

 

 

 

 本文由用戶 ox1110 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!