web-dev-qa-db-ja.com

Vimの起動時間のプロファイリング

Vimを使用すると、多くのプラグインが有効になります。長年にわたってプラグインを収集してきました。 Vimの起動に時間がかかることに少しうんざりしているので、スタートアップのプロファイルを作成し、所有している多くのプラグインのうちどれが原因かを確認したいと思います。

Vimのスタートアップやスクリプト実行をプロファイルする方法はありますか?理想的には、Vimがロードする各VimスクリプトでVimが費やす時間を知りたいのです。

124
Benj

Vim 7.2.269以降を使用している場合は、使用できる--startuptimeオプションがあります。

vim --startuptime vim.log

ヘルプから(vim -h):

--startuptime <file> Write startup timing messages to <file>
167
jamessan

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コマンドは、スクリプトの数が多すぎる場合。

37
ZyX

this Githubプロジェクトを作成して、あなたの質問によりよく答えるようにしました。基本的に、すべてのプラグインの各関数呼び出しのタイミングを合計します。これは、生のvimプロファイル出力からは明らかではありません(しかし重要です)。

次のような結果の図が表示されます。

vim-plugins-profile figure

次のようなテキスト出力とともに:

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!    
35
hyiltiz

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
20
innaM

Rに依存する @ hyiltiz によって行われた作業に基づいて、プロファイラーの Pythonバージョン を作成しました。これはRのシステムでより頻繁に利用できるためです。

また、拡張が少し簡単なので、機能は次のとおりです。

  • プラグインフォルダーの自動検出、
  • 棒グラフmatplotlibのおかげで、
  • 平均/標準偏差を取得するために、複数の実行にわたって分析を実行します、
  • vimneovimの両方をサポート、
  • full vimコマンドとともに使用して、遅延読み込み機能をテストしたり、特定のファイルタイプのファイルを開いたりすることができます。
  • 結果をcsvファイルにエクスポートします。

出力は、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-profiler

16
BenC

Vim -V solution をinnaMで改良して、デルタ時間を表示しました。

vim -V 2>&1 | Perl -MTime::HiRes=time -ne '$a = time unless defined $a; print time - $a, ": ", $_' | tee vilog
16
Benj

.vimrcファイルからプラグインをロードしている場合、unix qコマンドのようなプロセスタイマーを使用できるように、ファイルの途中の一部の行にtimeを挿入して終了させることができます。より徹底的に、これは次のようになります。

  1. 既存の.vimrcファイルをバックアップします
  2. 選択したプラグインを除くすべてをコメントアウトする
  3. q行を挿入します
  4. time vimを繰り返し呼び出して平均する
  5. バックアップを復元

これはエレガントではありませんが、仕事が完了すると思います。

5
David Berger

特定のファイルを開くときに--startimeをトレースすると便利な場合があります

gvim app/views/layouts/application.html.erb --startuptime time.log
1
Mauro

Vimの起動時間をプロファイルするプラグインがあります。

http://www.vim.org/scripts/script.php?script_id=2915

1
Amjith

次のように使用できるbash timeコマンドはありません:

time vim

[〜#〜] edit [〜#〜]:スクリプトの起動時間は含まれません。代わりに@jamessanの提案を使用してください。

0
user650230