vimのjob機能を使ってプラグインを更新する
2ヶ月以上経ってるけど一応前回の続き。
~/.vim/pack/bundle/opt/配下にインストールされているプラグインを更新するには、
ls -d ~/.vim/pack/bundle/opt/* | xargs -I{} git -C {} pull --ff --ff-only
でやってしまうのが手っ取り早いんだけど、あえてvimでやってみた。
以下のようにjob機能を使うことでvimをブロックせず、結果をバッファに出力するといった処理が簡単に実現できた。
let s:plugins = [ \ 'vim-quickrun', \ ] "プラグインを更新したくなったら :call UpdatePackPlugins() を実行する function! UpdatePackPlugins() " 結果を表示するためのバッファを作成 topleft split edit `='[update plugins]'` let s:idx = 0 call timer_start(100, 'PluginUpdateHandler', {'repeat': len(s:plugins)}) endfunction function! PluginUpdateHandler(timer) let path = expand('~/.vim/pack/bundle/opt/' . s:plugins[s:idx]) let cmd = printf('git -C %s pull --ff --ff-only', path) " コマンドを実行し、結果をout_nameで指定したバッファに出力する call job_start(cmd, {'out_io': 'buffer', 'out_name': '[update plugins]'}) let s:idx += 1 endfunction
UpdatePackPlugins()内でforを使うと全部更新できなかったのでtimer機能でPluginUpdateHandler()を呼び出すようにしている。