Profiling Vim opstarttijd

Ik heb veel plug-ins ingeschakeld bij het gebruik van Vim – ik heb in de loop der jaren plug-ins verzameld. Ik ben het een beetje beu hoe lang het duurt om Vim nu op te starten, dus ik wil graag de startup profileren en kijken welke van de vele plug-ins die ik heb verantwoordelijk zijn.

Is er een manier om het opstarten van Vim of het uitvoeren van scripts te profileren? Idealiter zou ik graag willen weten hoe lang Vim in elk Vim-script doorbrengt dat het laadt.


Antwoord 1, autoriteit 100%

Als je Vim 7.2.269 of hoger gebruikt, dan is er de –startuptime optie die je kunt gebruiken.

vim --startuptime vim.log

uit de help (vim -h):

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

Antwoord 2, autoriteit 23%

Ik heb ditGithub-project gemaakt om je vraag beter te kunnen beantwoorden. Kortom, het roept de ingebouwde profiler van vimaan met de juiste vlaggen en opties, en somt vervolgens de timing op voor elke functieaanroep voor elke plug-in, wat niet duidelijk (maar belangrijk) is uit de onbewerkte vim --profileuitvoer. Bash, Python, R, Ruby en Perl worden ondersteund (je hoeft niets te installeren aangezien je er waarschijnlijk al een hebt) voor het maken van de profileringsresultaten.

U krijgt een resultaat als volgt:

Samen met tekstuitvoer zoals deze:

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!    

Antwoord 3, autoriteit 21%

U kunt vim eigen profileringsmechanisme gebruiken:

vim --cmd 'profile start profile.log' \
    --cmd 'profile func *' \
    --cmd 'profile file *' \
    -c 'profdel func *' \
    -c 'profdel file *' \
    -c 'qa!'

Na het bovenstaande te hebben uitgevoerd, vindt u een bestand met de naam profile.log in de huidige map met alle vereiste informatie. Gebruik (na het openen van dit bestand in vim) om een ​​per-script informatietabel te krijgen die lijkt op de reeds aanwezige per-functietabel:

" 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])'))

Het wordt niet gesorteerd, maar u kunt altijd het ingebouwde :sort-commando gebruiken als het aantal scripts te groot is.


Antwoord 4, autoriteit 10%

Je zou vim -Vkunnen uitvoeren, de uitvoer door een hulpprogramma sturen dat tijdstempels toevoegt en de uitvoer analyseren. Deze opdrachtregel doet dit, bijvoorbeeld:

vim -V 2>&1 | perl -MTime::HiRes=time -ne 'print time, ": ", $_' | tee vilog

Misschien moet u blindelings :qtypen om terug te gaan naar uw prompt. Daarna zou u het bestand vilogin uw huidige directory moeten vinden met aan het begin van elke regel de tijdstempels van de dienstverbanden.

Als je kunt doen met een granulariteit van een seconde, kun je dit doen:

vim -V 2>&1 | perl -ne 'print time, ": ", $_' | tee vilog

Antwoord 5, autoriteit 10%

Op basis van het werk van @hyiltizdat afhankelijk is van R, heb ik een Python-versievan de profiler, aangezien deze vaker beschikbaar is op een systeem dat R.

Het is ook iets gemakkelijker uit te breiden, dus de functies zijn:

  • Automatische detectie van de map met plug-ins,
  • Barplotdankzij matplotlib,
  • Voer de analyse uit over verschillende uitvoeringen om de gemiddelde/standaarddeviatie,
  • te krijgen

  • Ondersteunt zowel vimals neovim,
  • Kan worden gebruikt met een volledig vim-commandoom lui ladende functies te testen, een bestand te openen met een specifiek bestandstype, enz.,
  • Resultaat exporteren naar een csv-bestand.

De uitvoer is vergelijkbaar met wat vim-plugins-profile biedt:

$ 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
=====================================


Antwoord 6, autoriteit 8%

Ik heb de vim -V oplossingvan innaM verfijnd om de deltatijd weer te geven:

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

Antwoord 7, autoriteit 2%

Als u uw plug-ins laadt vanuit een .vimrc-bestand, kunt u halverwege het bestand een qop een regel plaatsen om het te laten stoppen, zodat u een procestimer kunt gebruiken , zoals het unix timecommando. Meer grondig, dit zou er als volgt uitzien:

  1. maak een back-up van het bestaande .vimrc-bestand
  2. commentaar op alle, behalve een select aantal plug-ins
  3. voeg een qregel in
  4. bel time vimherhaaldelijk en gemiddeld
  5. back-up terugzetten

Dit is niet elegant, maar ik denk dat het de klus zal klaren.


Antwoord 8

Er is een plug-in om de opstarttijd van vim te profileren.

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


Antwoord 9

Het kan handig zijn om de --startimete traceren bij het openen van een bepaald bestand

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

Antwoord 10

Is er geen bash timecommando dat als volgt kan worden gebruikt:

time vim

EDIT: bevat niet de opstarttijd van de scripts. Gebruik in plaats daarvan de suggestie van @jamessan.

Other episodes