vim や neovim で標準で用意されている package 機能。まだ一度も触ったことがなかったので使ってみた。
使ってみるに当たって、 k-takata/minpac が 便利そうなので、利用してみた。
vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
" Plugin:
" Use minpac. {{{1
set packpath^='~/.cache/nvim/'
let s:minpac_dir = '~/.cache/nvim/pack/minpac/opt/minpac'
if has('vim_starting')
if !isdirectory(s:minpac_dir)
echo "Install minpac ..."
execute '!git clone --depth 1 https://github.com/k-takata/minpac ' . s:minpac_dir
endif
endif
" pack list. {{{1
" start plugins. {{{2
let s:start_plugs = [
\ ['Yggdroot/indentLine', {}],
\ ['itchyny/lightline.vim', {}],
\ ]
" opt plugins. {{{2
let s:opt_plugs = [
\ ['fatih/vim-go', {'type': 'opt'}],
\ ['zchee/deoplete-go', {'type': 'opt', 'do': 'silent! !make'}],
\ ['kristijanhusak/vim-hybrid-material', {'type': 'opt'}],
\ ]
" lazy load plugins. {{{2
let s:lazy_plugs = [
\ ['Konfekt/FastFold', {'type': 'opt'}],
\ ['thinca/vim-submode', {'type': 'opt'}],
\ ['LeafCage/yankround.vim', {'type': 'opt'}],
\ ['tyru/capture.vim', {'type': 'opt'}],
\ ['Shougo/context_filetype.vim', {'type': 'opt'}],
\ ['Shougo/denite.nvim', {'type': 'opt', 'do': 'silent! UpdateRemotePlugins'}, has('python3')],
\ ['Shougo/deoplete.nvim', {'type': 'opt', 'do': 'silent! UpdateRemotePlugins'}, has('nvim')],
\ ['Shougo/echodoc.vim', {'type': 'opt'}],
\ ['Shougo/vimproc.vim', {'type': 'opt', 'do': 'silent! !make'}],
\ ]
" minpac init. {{{1
if exists('*minpac#init')
" minpac is loaded.
call minpac#init()
call minpac#add('k-takata/minpac', {'type': 'opt'})
function! s:minpac_add(plugs)
for plug in a:plugs
let cond = len(plug) > 2 ? plug[2] : 1
if cond
exe 'call minpac#add("' . plug[0] . '", ' . string(plug[1]) . ')'
endif
endfor
endfunction
" start. {{{2
call <SID>minpac_add(s:start_plugs)
" opt. {{{2
call <SID>minpac_add(s:opt_plugs)
" lazy. {{{2
call <SID>minpac_add(s:lazy_plugs)
endif
" Async load lazy plugins. {{{1
let s:idx = 0
function! PackAddHandler(timer)
let plug = s:lazy_plugs[s:idx]
let name = split(plug[0], '/')[1]
let cond = len(plug) > 2 ? plug[2] : 1
if cond
" exe "echom 'packadd " . name . "'"
exe 'packadd ' . name
endif
let s:idx += 1
" doautocmd BufReadPost
au! lazy_load_bundle
endfunction
aug lazy_load_bundle
au MyAutoCmd VimEnter * call timer_start(1, 'PackAddHandler', {'repeat': len(s:lazy_plugs)})
aug END
" Plugin settings. {{{1
" lightline. {{{2
let g:lightline = {
\ 'colorscheme': 'jellybeans',
\ }
" deoplete.nvim. {{{2
let g:deoplete#enable_at_startup = 1
" vim-submode. {{{2
let g:submode_leave_with_key = 1
au MyAutoCmd VimEnter * call <SID>vim_submode_aft()
function! s:vim_submode_aft() abort
packadd vim-submode
call submode#enter_with('bufmove', 'n', '', 's>', '<C-w>>')
call submode#enter_with('bufmove', 'n', '', 's<', '<C-w><')
call submode#enter_with('bufmove', 'n', '', 's+', '<C-w>+')
call submode#enter_with('bufmove', 'n', '', 's-', '<C-w>-')
call submode#map('bufmove', 'n', '', '>', '<C-w>>')
call submode#map('bufmove', 'n', '', '<', '<C-w><')
call submode#map('bufmove', 'n', '', '+', '<C-w>+')
call submode#map('bufmove', 'n', '', '-', '<C-w>-')
endfunction
" yankround.vim. {{{2
nmap p <Plug>(yankround-p)
nmap P <Plug>(yankround-P)
nmap <C-p> <Plug>(yankround-prev)
nmap <C-n> <Plug>(yankround-next)
let g:yankround_max_history = 100
" vim-go. {{{2
let g:go_auto_type_info = 1
let g:go_snippet_engine = "neosnippet"
let g:go_fmt_command = "goimports"
let g:go_metalinter_autosave = 1
let g:go_fmt_autosave = 0
let g:go_gocode_unimported_packages = 1
" au MyAutoCmd BufWritePost *.go GoMetaLinter
" au MyAutoCmd BufWritePre *.go silent GoFmt
au MyAutoCmd BufNew,BufRead *.go call <SID>vim_go_cfg()
function! s:vim_go_cfg() abort
packadd vim-go
nmap <buffer> <Leader>gd <Plug>(go-doc)
nmap <buffer> <Leader>gs <Plug>(go-doc-split)
nmap <buffer> <Leader>gv <Plug>(go-doc-vertical)
nmap <buffer> <Leader>gb <Plug>(go-doc-browser)
nmap <buffer> <Leader>gr <Plug>(go-rename)
nnoremap <buffer> <Leader>gi :<C-u>GoImport<Space>
setl completeopt=menu,preview
endfunction
" Define user commands for updating/cleaning the plugins. {{{1
" Each of them loads minpac, reloads .vimrc to register the
" information of plugins, then performs the task.
com! PackClean packadd minpac | source $MYVIMRC | call minpac#clean()
com! PackUpdate packadd minpac | source $MYVIMRC | call minpac#clean() | call minpac#update()
com! PackListStart packadd minpac | source $MYVIMRC | Capture echo minpac#getpackages("", "start")
com! PackListOpt packadd minpac | source $MYVIMRC | Capture echo minpac#getpackages("", "opt")
com! PackNameStart packadd minpac | source $MYVIMRC | Capture echo minpac#getpackages("", "start", "", 1)
com! PackNameOpt packadd minpac | source $MYVIMRC | Capture echo minpac#getpackages("", "opt", "", 1)設定するに当たって、 Vim の起動速度2 - Memo を参考に (というかほぼパク・・・) した。
package には、 start と、 opt がある。 start は、デフォルトで読み込まれるプラグインで、 opt なものは、別途 packadd をすることで
遅延ロードすることが出来る。
僕は 3つの 種類に分けて設定してみた。
s:start_plugs に記載しているプラグインは、文字通り start でデフォルトで読み込まれるプラグインたち。
s:opt_plugs に記載しているプラグインは、 特定の filetype で有効化するようなやつ。これらはその filetype の
autocmd で個別に packadd する。
ちなみに、 colorscheme も、 opt でいいらしい。 colorscheme コマンドが使用される時に自動的に packadd されるよう。
んで、 s:lazy_plugs に記載しているのが、遅延ロードするやつ。
Vim の起動速度2 - Memo で書かれているように、
タイマー機能を使用して、 vim が起動した後に遅延で packadd する。
これで、起動時間を計測したところ・・・ dein.vim より、少し遅いくらいになった・・・。
dein.vim めちゃ早いことがわかった・・・。
参考
k-takata/minpac: A minimal package manager for Vim 8 (and Neovim)