TokyoVim#5に行ってきた
勉強会はこれが初の参加となりますが、TokyoVim#5に行ってきました。
Vimに関する何かをやる会ということで、みなさん侍のようにもくもくとやっていました。
自分がやったのは
- tablineの設定
- Unite画面のハイライト設定
- vim-ipiの設定
の3つです。
1.と2.はデフォルト設定から変えただけです。(特にネタになるようなことはありません)
3.のvim-ipiですが、これはBundle内のpluginを手動で読み込むためのpluginです。
pluginの管理自体はneobundle.vimがあれば困ることはないのですが、
最近plugin数が100を超えてしまい、vimの起動がとても遅くて困っています。
pluginを捨てる。というのが最も正しい解なのかもしれませんが、
モノを捨てるのが苦手な自分には それを 捨てるなんて とんでもない!
そこでFileTypeに特化したpluginはautocmd FileTypeからvim-ipiで読み込むことにし、
pluginを捨てずにvimの起動時間を短縮化してみました。
まずはvim-ipiのインストール。
このpluginはvim-pathogenが必要になるので両方ともNeoBundleInstallします。
次にvimrcでipiにBundleフォルダの場所を設定します。
call ipi#inspect("Bundle")
これでIPコマンドが使えるようになりました。
しかし、最初はpluginが起動時に全て読み込まれてしまうので意味がありません。
なのでipiから読み込みたいpluginはvimrcでNeoExternalBundleにしておきます。
NeoExternalBundle 'git://github.com/klen/python-mode.git'
※今日はpythonの人が何人かいたのでpythonの例にします
あとはautocmdに追加していくだけなのですが、以下の設定だと
FileTypeが設定されるたびに毎回IPコマンドを実行してしまいます。
autocmd FileType python IP python-mode
今日のメインはこれの対処だったのですが、こんな感じでautocmdを
自動生成・削除する処理を作ってみました。
" autocmdで呼ばれる関数
function! LazyLoading(ft)
filetype plugin indent off
for plugin_name in g:ll_plugins[a:ft]
execute "silent! IP " . plugin_name
endfor
filetype plugin indent on
execute "autocmd! MyIPI_" . a:ft
execute "set filetype=" . a:ft
endfunction
" 読み込むpluginはFileTypeをキーにした辞書に配列として格納
let g:ll_plugins={}
let g:ll_plugins['python'] = [
\ 'pytest.vim',
\ 'python-mode',
\ 'taglist.vim',
\ 'TagHighlight',
\ ]
for k in keys(g:ll_plugins)
execute "augroup " . "MyIPI_" . k
execute "autocmd!"
execute "autocmd FileType " . k . " call LazyLoading('" . k . "')"
execute "augroup END"
endfor
FileTypeの追加はg:ll_pluginsに新しい要素を追加すればOKです。
やっぱりvimなのに起動が遅いってのはダメですよね。