Vundle是一款非常出名且历史悠久的Vim插件管理工具。但随着安装的vim插件越来越多,使用Vundle来管理这些插件时效率变得越来越低,vim启动耗时也越来越大。

vim-plug是一款非常轻量又高效的vim插件管理工具。它支持全异步、多线程并行安装插件,支持git分支、标签等,可以对插件进行回滚更新、还支持按需加载插件(On-demand loading),可以指定对特定文件类型加载对应vim插件,大大加快了vim启动时间。

1.1 安装vim-plug插件管理器

vim-plug使用github进行托管和维护,只需要下载对应的 plug.vim 文件并保存到 autoload 目录即可完成安装。

ubuntu系统下可使用以下命令快速安装vim-plug。

1
2
3
mkdir ~/.vim/autoload/
cd ~/.vim/autoload/
wget https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

或使用curl工具来简化下载过程。

1
2
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

1.2 vim-plug配置介绍

使用vim-plug安装vim插件的方法与另外一个著名的vim插件管理器Vundle非常相似,只需要在vim配置文件 ~/.vimrc 增加以 call plug#begin(PLUGIN_DIRECTORY) 开始,并以 plug#end() 结束的配置段即可。

下面是一个典型的vim-plug的配置实例,使用了多种vim-plug相关的配置形式。

1
2
3
4
5
6
7
8
9
10
11
call plug#begin('~/.vim/plugged')
Plug 'junegunn/vim-easy-align'
Plug 'https://github.com/junegunn/vim-github-dashboard.git'
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug '~/my-prototype-plugin'
call plug#end()

在上面的vim-plug配置中,以 call plug#begin('~/.vim/plugged') 标识vim-plug配置的开始并显式指定vim插件的存放路径为 ~/.vim/plugged

Plug 'junegunn/vim-easy-align' 使用缩写形式指定了插件在github的地址 (https://github.com/junegunn/vim-easy-align);

Plug 'https://github.com/junegunn/vim-github-dashboard.git' 则用完整的URL指定插件在github的位置;

Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' 用 | 将两个vim插件写在同一行配置中;

Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } 使用 按需加载,表明只有在 NERDTreeToggle 命令被调用时, 对应的插件才会被加载;

Plug 'tpope/vim-fireplace', { 'for': 'clojure' } 使用 按需加载,表明只有编辑 clojure 类型的文件时该插件才会被打开;

Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } 显式指定使用YCM-Generator插件的 stable 分支;

Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' } 指定插件所用git标签,rtp描述了包含vim插件的子目录;

Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }dir 选项单独指定了该插件存放的目录,do选项用于 Post-update hook,指定在安装或者更新完插件后所需要执行的额外操作;

Plug '~/my-prototype-plugin' 表示不用github托管的本地vim插件;

call plug#end() 用于标识vim-plug配置的结束。


总结上面的vim-plug配置,可以发现vim-plug支持以下配置项:

选项 功能描述
branch/tag/commit 所用插件git仓库的Branch/tag/commit
rtp 包含vim插件的子目录
dir 该vim插件的定制化目录 (Custom directory)
as 给vim插件取别名
do Post-update hook,某些vim插件在完成安装或更新后,需要执行额外的操作,可以使用 do 选项指定具体的操作或函数
on 按需加载: vim命令或<Plug>-mappings
for 按需加载: 文件类型
frozen Do not update unless explicitly specified

do 选项的操作如果是以 : 开头,则表示其为vim命令,例如: Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' }

1.3 使用vim-plug安装vim插件

在Vim命令行模式下,使用命令 :PlugInstall 可安装vim配置文件中所有配置的vim插件;也可以使用 PlugInstall [name ...] 来指定安装某一个或某几个vim插件。

vim-plug安装插件

:PlugStatus 可查看vim插件的当前状态,:PlugUpdate [name ...] 用于安装或更新对应vim插件,而vim-plug本身的更新则使用命令 :PlugUpgrade

vim-plug的命令列表如下所示。

命令 功能描述
PlugInstall [name ...] [#threads] 安装插件
PlugUpdate [name ...] [#threads] 安装或更新vim插件
PlugClean[!] 卸装未使用的目录 (bang version will clean without prompt)
PlugUpgrade 更新vim-plug自身
PlugStatus 查看vim插件的状态
PlugDiff 对比上次PlugUpdate的更改 (Examine changes from the previous update and the pending changes)
PlugSnapshot[!] [output path] 保存当前插件的镜像副本到指定目录 (Generate script for restoring the current snapshot of the plugins)

嗯,扫一扫就可以找到小女子我啦~