Vimを使用すると、多くのプラグインが有効になります。長年にわたってプラグインを収集してきました。 Vimの起動に時間がかかることに少しうんざりしているので、スタートアップのプロファイルを作成し、所有している多くのプラグインのうちどれが原因かを確認したいと思います。
Vimのスタートアップやスクリプト実行をプロファイルする方法はありますか?理想的には、Vimがロードする各VimスクリプトでVimが費やす時間を知りたいのです。
Vim 7.2.269以降を使用している場合は、使用できる--startuptimeオプションがあります。
vim --startuptime vim.log
ヘルプから(vim -h
):
--startuptime <file> Write startup timing messages to <file>
Vim独自のプロファイリングメカニズムを使用できます。
vim --cmd 'profile start profile.log' \
--cmd 'profile func *' \
--cmd 'profile file *' \
-c 'profdel func *' \
-c 'profdel file *' \
-c 'qa!'
上記を実行すると、現在のディレクトリに必要なすべての情報を含むprofile.logというファイルが見つかります。既に存在する機能ごとのものと同様のスクリプトごとの情報テーブルを取得するには、次のコマンドを使用します(vimでこのファイルを開いた後)。
" Open profile.log file in vim first
let timings=[]
g/^SCRIPT/call add(timings, [getline('.')[len('SCRIPT '):], matchstr(getline(line('.')+1), '^Sourced \zs\d\+')]+map(getline(line('.')+2, line('.')+3), 'matchstr(v:val, ''\d\+\.\d\+$'')'))
enew
call setline('.', ['count total (s) self (s) script']+map(copy(timings), 'printf("%5u %9s %8s %s", v:val[1], v:val[2], v:val[3], v:val[0])'))
並べ替えられませんが、組み込みの:sort
コマンドは、スクリプトの数が多すぎる場合。
this Githubプロジェクトを作成して、あなたの質問によりよく答えるようにしました。基本的に、すべてのプラグインの各関数呼び出しのタイミングを合計します。これは、生のvimプロファイル出力からは明らかではありません(しかし重要です)。
次のような結果の図が表示されます。
次のようなテキスト出力とともに:
Generating vim startup profile...
Parsing vim startup profile...
Crunching data and generating profile plot ...
Your plugins startup profile graph is saved
as `profile.png` under current directory.
==========================================
Top 10 Plugins That Slows Down Vim Startup
==========================================
1 105.13 "vim-colorschemes"
2 42.661 "vim-easytags"
3 31.173 "vim-vendetta"
4 22.02 "syntastic"
5 13.362 "vim-online-thesaurus"
6 7.888 "vim-easymotion"
7 6.931 "vim-airline"
8 6.608 "YankRing.vim"
9 5.266 "nerdcommenter"
10 5.017 "delimitMate"
==========================================
Done!
vim -V
を実行し、タイムスタンプを追加するユーティリティを介して出力をパイプ処理し、出力を分析できます。このコマンドラインはこれを行います、例えば:
vim -V 2>&1 | Perl -MTime::HiRes=time -ne 'print time, ": ", $_' | tee vilog
盲目的に入力する必要があるかもしれません :q プロンプトに戻ります。その後、現在のディレクトリでファイルvilog
を見つけ、各行の先頭にタイムスタンプを付けます。
秒単位で実行できる場合、これを実行できます。
vim -V 2>&1 | Perl -ne 'print time, ": ", $_' | tee vilog
Rに依存する @ hyiltiz によって行われた作業に基づいて、プロファイラーの Pythonバージョン を作成しました。これはRのシステムでより頻繁に利用できるためです。
また、拡張が少し簡単なので、機能は次のとおりです。
出力は、vim-plugins-profileが提供するものに類似しています:
$ vim-profiler.py -p nvim
Running nvim to generate startup logs... done.
Loading and processing logs... done.
Plugin directory: /home/user/.config/nvim/plugged
=====================================
Top 10 plugins slowing nvim's startup
=====================================
1 3.326 vim-fugitive
2 2.936 tcomment_vim
3 2.315 vim-hybrid
4 1.751 lightline.vim
5 0.959 vim-sneak
6 0.943 supertab
7 0.542 vim-surround
8 0.536 fzf.vim
9 0.450 fzf
10 0.434 auto-pairs
=====================================
Vim -V solution をinnaMで改良して、デルタ時間を表示しました。
vim -V 2>&1 | Perl -MTime::HiRes=time -ne '$a = time unless defined $a; print time - $a, ": ", $_' | tee vilog
.vimrcファイルからプラグインをロードしている場合、unix q
コマンドのようなプロセスタイマーを使用できるように、ファイルの途中の一部の行にtime
を挿入して終了させることができます。より徹底的に、これは次のようになります。
.vimrc
ファイルをバックアップしますq
行を挿入しますtime vim
を繰り返し呼び出して平均するこれはエレガントではありませんが、仕事が完了すると思います。
特定のファイルを開くときに--startime
をトレースすると便利な場合があります
gvim app/views/layouts/application.html.erb --startuptime time.log
Vimの起動時間をプロファイルするプラグインがあります。
次のように使用できるbash time
コマンドはありません:
time vim
[〜#〜] edit [〜#〜]:スクリプトの起動時間は含まれません。代わりに@jamessanの提案を使用してください。