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 vim
aan 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 --profile
uitvoer. 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 -V
kunnen 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 vilog
in 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,
- 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.
te krijgen
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 q
op een regel plaatsen om het te laten stoppen, zodat u een procestimer kunt gebruiken , zoals het unix time
commando. Meer grondig, dit zou er als volgt uitzien:
- maak een back-up van het bestaande
.vimrc
-bestand - commentaar op alle, behalve een select aantal plug-ins
- voeg een
q
regel in - bel
time vim
herhaaldelijk en gemiddeld - 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 --startime
te traceren bij het openen van een bepaald bestand
gvim app/views/layouts/application.html.erb --startuptime time.log
Antwoord 10
Is er geen bash time
commando dat als volgt kan worden gebruikt:
time vim
EDIT: bevat niet de opstarttijd van de scripts. Gebruik in plaats daarvan de suggestie van @jamessan.