什么是 Vim 插件
見 :h plugin
:
Vim's functionality can be extended by adding plugins. A plugin is nothing
more than a Vim script file that is loaded automatically when Vim starts. You
can add a plugin very easily by dropping it in your plugin directory.
一個(gè) Vim 插件不過是 Vim 啟動(dòng)時(shí)自動(dòng)加載的 Vim script 腳本而已. Vim 啟動(dòng)時(shí)會(huì)自動(dòng)加載 runtimepath 中的 plugin 子目錄下的所有文件. 那么, runtimepath 又是什么? :h runtimepath
:
runtimepath 就是 Vim 查找腳本文件的地方, runtimepath 之于 Vim 鳄抒,
有點(diǎn)類似 $PATH 之于 shell. :echo &runtimepath
即可進(jìn)行查看.
runtimepath 下面有兩個(gè)子目錄需要注意:
plugin: plugin 目錄下面的所有文件都會(huì)在啟動(dòng)時(shí)進(jìn)行加載.
autoload: autoload 里面的文件, 在啟動(dòng)時(shí)并不會(huì)進(jìn)行加載, 而是通過一種特殊的方式進(jìn)行加載, 主要是命名上有要求, 詳情見
:h autoload
, 這里就不展開了.
autoload 只不過是為了加速 Vim 的啟動(dòng), 因?yàn)橐獙⑺械膬?nèi)容放在 plugin 下面的話,可能會(huì)導(dǎo)致啟動(dòng)時(shí)間增加, 而且也沒有必要, 因?yàn)楹芏鄡?nèi)容并不常用, 無(wú)須在啟動(dòng)時(shí)加載. "壞處" 就是需要在命名上進(jìn)行規(guī)范.
上圖中還有一個(gè) doc 目錄, 它里面通常放的是插件的 help 內(nèi)容.
如果不用插件管理器, 手動(dòng)管理 Vim Script 腳本文件也可以. 但是當(dāng)插件一多的話, 就會(huì)變得很可怕, 更新, 刪除都會(huì)很麻煩. 直到目前為止, Vim 并沒有標(biāo)準(zhǔn)的插件管理器, 盡管 Vim 8 已經(jīng)引入了 packages 的管理功能 (:h packages
).
主流插件管理器
主流的插件管理器有下面這幾個(gè), 從早期現(xiàn)在看來 "稍顯簡(jiǎn)陋" 的 pathogen, 到 Vundle 已經(jīng)是真正有了幾分 manager 的意思, 再到現(xiàn)在比較流行的 vim-plug 和 dein.vim ( neobundle 是 dein 作者前一個(gè)插件管理器作品, 已經(jīng)棄用了 ). vim-plug 和 dein.vim 現(xiàn)在都支持并行安裝和延遲加載, 這對(duì)于有幾十甚至上百個(gè)插件的人來說是非常重要的.
我比較喜歡 vim-plug, space-vim 也是使用的 vim-plug, 因?yàn)樗O(shè)計(jì)簡(jiǎn)單, 使用方便, 功能也都算完備.
非主流插件管理器
除了主流的插件管理器, 還有很多非主流的管理器. 主流管理器都是用 Vim Script 實(shí)現(xiàn)的, 只是有些功能, 比如并行安裝, 會(huì)有一些版本或是編譯的特性 (+python
等)要求, 使用上沒有什么依賴. 而一些非主流管理器可能是用其他語(yǔ)言寫的, 需要你事先安裝了那個(gè)語(yǔ)言, 比如有用 Rust 和 Haskell 實(shí)現(xiàn)的.
其實(shí)一個(gè)管理器的主要功能就是到 GitHub 上下載插件 (git clone
) 然后放到指定目錄, 這里 是 vim-plug 的作者對(duì) vim-plug 誕生寫的一篇文章, 里面介紹了 vim-plug 的由來.
下面是一些非主流的 Vim 插件管理器, 有興趣的可以自行查看: