ステータスラインのプラグインをやめて自作にしたら400ms -> 200msに高速化できた。
起動速度の計測
まずは計測せねばならない。こちらの記事を参考にさせていただいた。
https://zenn.dev/uu64/articles/6518c75cdf5e02
計測方法は2種類あり、まずは素のコマンドで計測する方法。
vim --startuptime startup.log -c ":q"
startup.logが生成されるので中身を見てみるとこんな感じで読み込み順にかかった時間と経過時間を出力してくれる。
times in msec clock self+sourced self: sourced script clock elapsed: other lines 000.019 000.019: --- NVIM STARTING --- 000.154 000.135: event init 000.323 000.169: early init 000.914 000.591: locale set 000.967 000.053: init first window ...
もう1つの方法はvim-startuptimeを使う方法。
go install github.com/rhysd/vim-startuptime@latest
でインストール。
計測
vim-startuptime -vimpath nvim
すると下記のような出力が得られる。
$ vim-startuptime -vimpath nvim Extra options: [] Measured: 10 times Total Average: 153.954600 msec Total Max: 170.386000 msec Total Min: 149.676000 msec AVERAGE MAX MIN --------------------------------- 128.453200 142.183000 124.901000: /Users/me/.config/nvim/init.vim 6.862900 9.434000 6.499000: loading plugins 6.431600 6.964000 6.182000: BufEnter autocommands 5.676600 5.839000 5.636000: /Users/me/.config/nvim/colors/jellybeans.vim 2.443500 2.463000 2.421000: /usr/local/share/nvim/runtime/filetype.vim 2.185100 2.537000 2.106000: /Users/me/.config/nvim/dein/repos/github.com/neoclide/coc.nvim_release/plugin/coc.vim ...
10回の平均を出してくれるのでありがたい。
原因を調査したらプラグインの読み込みに時間がかかっていて、vim-airline/vim-airlineが結構重かった
他にも時間がかかっているプラグインはいくつかあったのだけれど、一番不要で効果が高かったのがvim-airline/vim-airline
だった。vim-airlineはvimのステータスラインをカスタマイズするプラグインで、モードやブランチ名の表示など、ステータスラインをリッチな見た目にしてくれる。
vim-airlineの設定は下記だけで特に凝ったことはしていなかった。
let g:airline#extensions#default#layout = [ \ [ 'a', 'b', 'c'], \ [ 'x', 'y'] \ ]
便利でもなく不便でもなくもはやそこに当たり前のようにあったステータスラインだったが、よくよく考えてみるともはやステータスラインにそこまで情報いらんなと思ったのでやめてみた。
自作のステータスラインにする
下記で落ち着いた。
" ============================== " statusline " ============================== hi User1 guifg=#FFFFFF guibg=#000000 hi User2 guifg=#ffffff guibg=#333333 " ブランチ名 set statusline=%9*\ \ %2*%{matchstr(fugitive#statusline(),'(\zs.*\ze)')} " ファイル名 set statusline+=%1*\ %{expand('%')} " ここから右寄せ set statusline+=%= " 現在行 / 全体行 ファイル種別 set statusline+=%l/%L\ \%y
ブランチ名、ファイル名、現在行と全体行、ファイル種別を表示。
ステータスラインの色については、User1〜9の値が使用できるっぽく、User1~4はpositive色、User5~9はnegative色と決まっているみたい。ただ厳密な決まりではなく自由に設定できるっぽい。
ブランチ名の表示にはfugitive#statusline()
を使っていて、これはプラグインのtpope/vim-fugitiveのメソッド。ここに自作の関数を当てることもできるのだが、カーソルを移動するたびに実行されることになるのでキャッシュ戦略というか少し工夫が必要になるので、そのへんはプラグインに委ねた。
初見ではステータスラインの記法になれなくて意味がわからなかったが、いくつか他人の設定を見ていると慣れてくる。そこまで記法の種類も多くないのでたぶんすぐに慣れる。記法については下記を参考にさせていただいた。
https://qiita.com/Cj-bc/items/dbe62075474c0e29a777
終わり
vim楽しいィィ!