Vim

Vim 插件管理器 - dein.vim

2020-06-06  本文已影响0人  Whyn

前言

vim-plug 是一个非常优秀的 Vim 插件管理器,但是随着安装的插件越来越多,逐渐发现即使使用 vim-plug,首次启动速度仍然很慢。

究其原因,虽然 vim-plug 本身提供了优秀的延迟加载机制,但是可用于延迟加载的选项相对较少,另一方面,vim-plug 对插件的延迟加载与配置无法进行统一,很多时候,我们想对插件进行延迟加载,但是插件配置项如果调用了插件功能,则加载的时候就会报错(因为插件此时还未加载)...

针对上述问题,dein.vim 都给出了更优秀的解决方案。

vim-plug 是一款非常优秀的插件管理器,具备优秀的插件管理性能,同时操作及其简单,且具备优秀的 UI 显示,通常情况下,建议使用 vim-plug
但是如果当使用 vim-plug 后,启动速度仍然很慢,那就可以考虑下 dein.vim

dein 本身只提供函数接口进行操作,没有提供命令与 UI 显示,对于用户相对不友好。
不过 Github 上面已经有人对其进行了再一次封装:

可以结合以上两个插件,简化 dein 使用。

优点

安装

curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
# 安装路径我们选择:~/.vim/dein
sh ./installer.sh ~/.vim/dein
Invoke-WebRequest https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.ps1 -OutFile installer.ps1
# Allow to run third-party script
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 安装路径我们选择:~/.vim/dein
./installer.ps1 ~/.vim/dein

dein 基本使用

if &compatible
    set nocompatible
endif

let s:dein_path = '~/.vim/dein'

" Add the dein installation directory into runtimepath
let &runtimepath = &runtimepath.','.s:dein_path.'/repos/github.com/Shougo/dein.vim'

if dein#load_state(s:dein_path)
  call dein#begin(s:dein_path)

  call dein#add(s:dein_path.'/repos/github.com/Shougo/dein.vim')

  " install third-party plugins
  " call dein#add('tpope/vim-surround')

  call dein#end()
  call dein#save_state()
endif

filetype plugin indent on
syntax enable

:以上任何操作如果失败,一律进行如下操作,确保不受 dein 缓存机制影响:

  1. 重新打开 Vim,执行:call dein#clear_state(),清除状态文件,强制 dein 重新加载配置。
  2. 退出后重新打开 Vim,执行:call dein#recache_runtimepath(),清除旧缓存
  3. 退出 Vim,再重新打开,执行剩余操作

一些有用操作/设置

在对 dein 进行详细介绍前,先了解下其提供的一些比较有用的操作/设置,方便理解与使用。

" 开始块,安装路径可以自由更改
:call dein#begin('~/.cache/dein') 
" 添加插件安装声明
:call dein#add('~/.vim/plugB')
" 配置块结束,安装自动开始
:call dein#end()
:call dein#source('vim-surround')

dein#source会直接加载插件,无论插件是否配置了懒加载。

call dein#add('junegunn/fzf', {
    \'lzay': 1,                                               " 非0 表示启用懒加载
    \ 'if': s:has_exec('fzf'),                                " 条件满足时才加载(判断类型`String`/`Number`)
    \ 'on_if': 'winnr("$") > 1',                              " 条件满足时才加载(判断类型`String`)
    \ 'on_cmd': 'FZF',                                        " 存在 FZF 命令时才加载
    \ 'on_func': 'fzf#run',                                   " 调用了函数 fzf#run 时才进行加载
    \ 'on_event': ['VimEnter', 'BufRead']                     " 事件发生时才加载
    \ 'on_ft': 'python'                                       " 文件类型匹配时才加载
    \ 'on_map': { 'n' : ['<C-n>', '<C-p>'], 'x' : '<C-n>'}} " 匹配特定模式下的按键映射时才加载
    \ 'on_path': '.editorconfig',                             " 路径匹配时才加载
    \ 'on_source':  ['vim-surround']                          " 插件 vim-surround 加载时才加载
    \ })

:懒加载时lazy可忽略,dein 会自动根据其他选项自动判断是否启用懒加载。

:echo dein#get('vim-surround')

函数

以下是 dein.vim 内置的函数简介:

变量

选项(OPTIONS)

以下是 dein 提供的选项列表简介:dein-options

call dein#add('neoclide/coc.nvim', {'merged':0, 'rev': 'release', 'trusted': 1})

sudo模式启动后,dein.vim 的状态会变更,导致下一次非sudo会话时,普通插件无法触发加载,此时手动调用call dein#clear_state(),然后重启 Vim 即可。

钩子函数(HOOKS)

dein 提供了一些钩子函数,对于插件的初始化操作很有用。

:函数类型的钩子函数( Function hooks)不会被缓存,必须手动初始化。
:对于非懒加载插件,钩子函数的加载顺序无法保证有序。
:钩子函数的字符串表达式以命令行模式(Ex commands)进行执行。
:钩子函数中涉及多个操作时,使用换行符进行分割。

以下是 dein 提供的钩子函数简介:

参考

上一篇下一篇

猜你喜欢

热点阅读