作为 VIM 的重度患者, 一款好用的插件管理工具显得尤为重要, 毕竟给 VIM 增加新功能, 或者是新增编程语言的支持都需要安装插件. 我个人目前安装了 133 款 VIM 插件.

我使用的 VIM 插件管理工具也从早起的 Vundle 到 NeoBundle, 再到现在使用的 vim-plug.

选择 vim-plug , 是因为它:简洁且快速, 没有外部依赖, 整个插件只有一个文件;

该有的功能都有:按需加载插件(On-demand loading); 这样可以加快 VIM 启动时间

Post-update hooks; 可以在插件安装或者更新时执行一些操作, 如 make 等

还提供了更高阶的功能, 使得安装或更新插件都更快速:并行化地安装或者更新插件;

按照 shallow 的方式 clone 插件库, 下载更迅速

本文是 vim-plug 的一个简明教程, 会介绍它的安装使用, 以及我个人用到的一些 tips.

安装

官网是把 vim-plug 安装在 vim 的默认目录 ~/.vim 中, 但我个人更喜欢把它放在一个特定的位置, 这样不管是 vim 还是 neovim 都可以正常的加载它.

下面是 linux/macOS/unix 中直接在 vimrc 中安装 vim-plug 的代码:let $BUNDLE = expand("$HOME/.dotfiles/data/vimdata/bundle")

let $PLUG_DIR = expand("$BUNDLE/vim-plug")

if empty(glob(expand("$PLUG_DIR/plug.vim")))

silent !curl -fLo $PLUG_DIR/plug.vim --create-dirs

\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

autocmd VimEnter * PlugInstall --sync | source ~/.vimrc

endif

source $PLUG_DIR/plug.vim

这段代码的意思是如果 vim-plug.vim 文件不存在, 就自动从 github 上下载最新版本到指定目录并加载.

使用

和大部分 vim 插件管理工具一样, vim-plug 需要一个 begin 和 end 函数, 同时在 begin 和 end 中间可以使用 Plug plugin_url 来加载插件, 例如:call plug#begin(expand($BUNDLE))

Plug 'https://github.com/hiberabyss/ProjectConfig'

call plug#end() " Should run at last

把上面这部分代码放在上一步代码后面, 重新加载 vimrc source ~/.vimrc, 然后我们就可以使用 :PlugInstall ProjectConfig 来安装 ProjectConfig 插件了. 安装完成后, 我们可以通过执行 :ProjectConfig 来检查插件是否成功安装.

和 :PlugInstall 类似, 我们可以使用 PlugUpdate 来更新插件.

通过按键来安装或更新插件

通过命令安装或者更新插件显得很繁琐, 我们期望通过快捷键可以实现下面的效果:当光标所在行是以 Plug 开始时, 我们可以直接按快捷键来安装或更新这个 Plug 命令加载的插件;

当光标所在行不是以 Plug 开始时, 按相同的按键, 我们会安装所有当前未安装的插件, 或者更新所有插件;

可以通过下面的代码实现我们想要的效果:function! GetPlugNameFronCurrentLine(cmd)

let plugin_name = getline(".")

if plugin_name !~ "^Plug"

execute(a:cmd . '!')

return

endif

let plugin_name = split(split(plugin_name, "'")[1], '/')[-1]

let plugin_name = substitute(plugin_name, '\.git$', '', 'g')

execute(a:cmd .' '. plugin_name)

endfunction

nmap ,pi :w:call GetPlugNameFronCurrentLine('PlugInstall')

nmap ,pu :call GetPlugNameFronCurrentLine('PlugUpdate')

当我们按 ,pi 时便可安装光标所在行的插件, 或者是按 ,pu 来更新光标所在行的插件.

按需加载插件

为了提高 vim 的启动速度, 我们期望某些插件只有在特定的情况下才被加载. 例如我们希望 vim-go 插件只有在编辑 go 类型的文件时才会被打开, 便可以通过如下方法实现:Plug 'https://github.com/fatih/vim-go.git', {'for': 'go'}

其中 for 后面的文件类型也可以使用列表, 如 {'for': ['go', 'golang']} .

同时, 也可以在调用命令的时候加载插件, 如:Plug 'https://github.com/Yggdroot/indentLine', {'on' : 'IndentLinesToggle'}

这段代码的意思是只有 IndentLinesToggle 被调用时, 对应的插件才会被加载. on 后面也可以使用列表.

手动加载插件

有时我们需要手动加载一些在 vim 启动时未被加载的插件, 例如我们可能希望在没打开 go 类型文件的情况下查看 vim-go 的帮助文档, 这时我们可以通过如下的自定义命令来加载 vim-go :function! s:plug_loaded(spec)

let rtp = join(filter([a:spec.dir, get(a:spec, 'rtp', '')], 'len(v:val)'), '/')

return stridx(&rtp, rtp) >= 0 && isdirectory(rtp)

endfunction

function! s:plug_names(...)

return sort(filter(keys(filter(copy(g:plugs), { k, v -> !s:plug_loaded(v) })), 'stridx(v:val, a:1) != -1'))

endfunction

command! -nargs=+ -bar -complete=customlist,s:plug_names PlugLoad call plug#load([])

在 vimrc 中加入上述代码后, 我们便可通过 :PlugLoad vim-go 来加载 vim-go 这个插件. PlugLoad 命令可以自动补全当前未加载的插件.

Post-update Hooks

我们可以通过 do 标签来指定在安装或者更新完插件后所需要做的操作:Plug 'https://github.com/autozimu/LanguageClient-neovim', { 'do': ':UpdateRemotePlugins' }

Tip: 基于 Ultisnip 快速补全 plug 命令

往往我们在安装插件的时候会先把插件的地址复制到系统剪贴板中, 假定当前系统剪贴板的内容为 https://github.com/hiberabyss/ProjectConfig 借助 Ultisnip 的自动补全功能, 我们可以实现如下的效果:

在 vim.snippets 中添加如下代码即可实现上面的效果:snippet plug "add new plugin" b

Plug '`!v @*`'$1

endsnippet

linux安装vim plug,VIM 插件管理工具 vim-plug 简明教程相关推荐

  1. Linux 安装 luarocks(lua的模块管理工具)

    1.简介 该软件包可以安装和更新lua的第三方模块. 2.下载地址 请在 http://luarocks.org/releases/ 页面选择需要的软件包. wget http://luarocks. ...

  2. lua管理linux,Linux 安装 luarocks(lua的模块管理工具)

    1.简介 该软件包可以安装和更新lua的第三方模块. 2.下载地址 请在 http://luarocks.org/releases/ 页面选择需要的软件包. wget http://luarocks. ...

  3. 扫描版pdf重排 linux,强大的桌面用 PDF 重排工具:K2pdfopt 简明教程

    用 Kindle 阅读 PDF 一直以来都遭到小伙伴们的无限吐槽,在那 Kindle 还能越狱的时代,我们有 Koreader 之类优秀的 Kindle 第三方插件实现 PDF 文档的实时重排,但是随 ...

  4. Vim插件管理工具Vundle以及常用插件

    1. Vim插件管理工具Vundle 虽然拥有大量的插件,却缺少一个 确之有效的插件管理器.所幸,Vundle的出现解决了这个问题. Vundle可以让你在配置文件中管理插件,并且非常方便的查找.安装 ...

  5. [工具]OFFICE插件管理工具-帮助更好地管理及使用电脑安装过的OFFICE插件

    在OFFICE软件的世界中,除了由微软提供的OFFICE软件功能外,还有大量的功能由第三方开发者完成,市面上也存在大量的OFFICE插件供用户选择. 使用场景 有些插件仅在某个特定场景下才会使用,日常 ...

  6. 【追加功能】OFFICE插件管理工具重整后再上路,更好用易用。

    现在使用OFFICE插件的群体越来越多,在8月份修复过的[OFFICE插件管理工具],尝试将COM加载项的插件管理进行完善. 但仍然有一小部分普通加载项的管理未能加到里面.特别是近期用户反馈到的Eas ...

  7. cad小插件文字刷_小懒人CAD插件管理工具

    小懒人cad插件管理工具是一款CAD插件管理软件,可以帮助用户管理CAD插件,不需要单个安装,支持一键加载,小懒人CAD插件管理软件不需要安装,下载即可使用.有需要的小伙伴欢迎来西西下载. 软件特征: ...

  8. wps 插件_【追加功能】OFFICE插件管理工具重整后再上路,更好用易用。

    现在使用OFFICE插件的群体越来越多,在8月份修复过的[OFFICE插件管理工具],尝试将COM加载项的插件管理进行完善. 但仍然有一小部分普通加载项的管理未能加到里面.特别是近期用户反馈到的Eas ...

  9. kubectl插件管理工具krew

    kubectl插件管理工具krew 一.kubectl简介 kubectl 是 Kubernetes 的命令行工具(CLI),是 Kubernetes 用户和管理员必备的管理工具.该kubectl工具 ...

最新文章

  1. HDU 3549 Flow Problem (dinic模版 isap模版)
  2. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
  3. mycat 10 分钟轻松入门
  4. nginx 转发慢_学习Nginx的正确姿势,多图详解助你更上一层楼!(干货收藏篇)...
  5. 牛客 - maki和tree(dfs)
  6. P5956-[POI2017]Podzielno【数学】
  7. ajax荷马史诗,荷马史诗(8)
  8. django-模板语言-传输各种数据类型
  9. 摩根大通:iPhone 13和新款iPhone SE将推动苹果业绩明年再破纪录
  10. [转载] Java的访问修饰符、非访问修饰符分类详细总结以及修饰符用途总结
  11. pc企业微信hook接口,企业微信营销软件,企业微信群发
  12. 中国互联网二十四年红黑史
  13. asp.net中gridview的绑定数据源实现增删改查
  14. 推荐两个在线代理服务器
  15. 安装NIVIDIA CUDA toolkit
  16. Excel批量转置——录制会循环的宏
  17. 1.数学建模比赛前期准备
  18. GWO灰狼优化算法综述(Grey Wolf Optimization)
  19. 通过Transporter迁移MongoDB 数据至elasticsearch
  20. 一个大四实习生从安卓小白到可以独自承担安卓和web前端的一年奋斗之旅

热门文章

  1. python读取.pkl格式的文件
  2. Mac符号对应键盘位置简解
  3. 保存chrome主题背景的图片
  4. STM32H743+LWIP+LAN8720+STM32cubeMX6.8.0
  5. 计量经济学导论-现代观点
  6. 运放的单电源供电与双电源供电的区别
  7. 华为HCIE有什么方向?哪个最热门
  8. 主键与外键的具体定义
  9. 矩阵加 减 乘法的C语言实现
  10. 调用lssvm训练好的模型