Profilowanie czasu uruchamiania Vima
Mam wiele pluginów włączonych podczas korzystania z Vima – zbierałem pluginy przez lata. Jestem trochę zmęczony tym, jak długo vim zajmuje uruchomienie, więc chciałbym profilować jego uruchomienie i zobaczyć, które z wielu wtyczek, które mam, są odpowiedzialne.
Czy Jest jakiś sposób, aby profilować uruchamianie Vima lub uruchamianie skryptu? Idealnie chciałbym wiedzieć, jak długo vim spędza w każdym skrypcie vim ładuje.
10 answers
Jeśli używasz Vima 7.2.269 lub nowszego, możesz użyć opcji -- startuptime.
vim --startuptime vim.log
Z pomocy (vim -h
):
--startuptime <file> Write startup timing messages to <file>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-01 16:03:56
Stworzyłem Ten Projekt Github, aby lepiej odpowiedzieć na twoje pytanie. Zasadniczo wywołuje wbudowany profiler vim
z odpowiednimi flagami i opcjami, a następnie podsumowuje czas dla każdego wywołania funkcji dla każdej wtyczki, co nie jest oczywiste (ale ważne) z surowego wyjścia vim --profile
. Bash, Python, R, Ruby i Perl są obsługiwane (nie musisz niczego instalować, ponieważ najprawdopodobniej masz już jeden z nich) do tworzenia wyników profilowania.
Otrzymasz wynik rysunek taki:
Wraz z wyjściem tekstowym w ten sposób:
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!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-15 17:01:57
Możesz użyć własnego mechanizmu profilowania Vima:
vim --cmd 'profile start profile.log' \
--cmd 'profile func *' \
--cmd 'profile file *' \
-c 'profdel func *' \
-c 'profdel file *' \
-c 'qa!'
Po uruchomieniu powyższego znajdziesz plik o nazwie profile.Zaloguj się do bieżącego katalogu ze wszystkimi wymaganymi informacjami. Aby uzyskać tabelę informacji o skrypcie podobną do obecnej dla jednej funkcji, Użyj (po otwarciu tego pliku w Vimie):
" 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])'))
Będzie niesortowane, ale zawsze możesz użyć wbudowanego polecenia :sort
, jeśli liczba skryptów jest zbyt duża.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-25 09:10:25
Możesz uruchomić vim -V
, przepuścić wyjście przez narzędzie, które dodaje znaczniki czasu i przeanalizować wyjście. Robi to w wierszach poleceń, np.:
vim -V 2>&1 | perl -MTime::HiRes=time -ne 'print time, ": ", $_' | tee vilog
Być może będziesz musiał ślepo wpisać : q, aby wrócić do monitu. Następnie powinieneś znaleźć plik vilog
w bieżącym katalogu ze znacznikami czasu hires na początku każdej linii.
Jeśli możesz zrobić z ziarnistością sekundy, możesz to zrobić:
vim -V 2>&1 | perl -ne 'print time, ": ", $_' | tee vilog
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-06 16:18:09
Bazując na pracy wykonanej przez @ hyiltiz , która zależy od R, zrobiłem wersję Pythona profilera, ponieważ jest ona częściej dostępna na systemie, który R.
Jest również nieco łatwiejsze do rozszerzenia, dlatego funkcje są:
- Automatyczne wykrywanie folderu wtyczki,
- wykres słupkowy Dzięki matplotlib,
- przeprowadź analizę w kilku egzekucjach, aby uzyskać średnie/odchylenie standardowe ,
- obsługuje zarówno vim i neovim ,
- może być używany z full vim command do testowania funkcji leniwego ładowania, otwierania pliku z określonym typem pliku itp.,
- Wyeksportuj wynik do pliku csv.
Wyjście jest podobne do tego, co zapewnia 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
=====================================
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:14
Udoskonaliłem rozwiązanie vim-V przez innaM, aby pokazać czas delta:
vim -V 2>&1 | perl -MTime::HiRes=time -ne '$a = time unless defined $a; print time - $a, ": ", $_' | tee vilog
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:14
Jeśli ładujesz wtyczki zplik vimrc, co można zrobić, to umieścić q
na jakiejś części linii w drodze do pliku, aby go zamknąć, więc można użyć timera procesu, jak polecenie unix time
. Dokładniej, wyglądałoby to tak:
- kopia zapasowa istniejącego pliku
.vimrc
- skomentuj wszystkie oprócz wybranej liczby wtyczek
- insert a
q
line - call
time vim
repeteadly and average - Przywróć kopię zapasową
To nie jest eleganckie, ale myślę, że to wykonam zadanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-06 14:17:31
Istnieje wtyczka do profilowania czasu uruchamiania Vima.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-07 16:37:58
Może być wygodne śledzenie --startime
podczas otwierania określonego pliku
gvim app/views/layouts/application.html.erb --startuptime time.log
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-11 15:26:24
Czy nie ma komendy bash time
, która może być tak użyta:
time vim
EDIT: nie zawiera czasu uruchamiania skryptów. Użyj zamiast tego sugestii @ jamessan.