Профилирование времени запуска Vim


У меня есть много плагинов, включенных при использовании Vim – я собирал плагины на протяжении многих лет. Я немного устал от того, сколько времени занимает Vim, чтобы начать сейчас, поэтому я хотел бы профилировать его запуск и посмотреть, какие из многих плагинов у меня есть.

есть ли способ профилировать запуск Vim или запуск скрипта? В идеале я хотел бы знать, как долго Vim проводит в каждом скрипте Vim, который он загружает.

10 107

10 ответов:

Если вы используете 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!'

после запуска выше вы найдете файл под названием профиль.войти в текущий каталог со всей необходимой информацией. Чтобы получить таблицу информации для каждого скрипта, аналогичную уже существующей для каждой функции, используйте (после открытия этого файла в 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 команда, если количество сценариев слишком велико.

Я создал этой проект Github, чтобы лучше ответить на ваш вопрос. В основном, он суммирует время для каждого вызова функции для каждого плагина, что не очевидно (но важно) из вывода профиля raw 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!    

вы можете запустить 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

Я уточнил vim-V решение по innaM, чтобы показать время дельты:

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

на основе работы @hyiltiz Это зависит от R, я сделал a Python версии профилировщика, так как это чаще всего доступно в системе, которая R.

это также немного легче расширить, таким образом, функции:

  • автоматическое обнаружение папки плагина,
  • Bar plot спасибо matplotlib,
  • запустите анализ по нескольким исполнениям, чтобы получить среднее/стандартное отклонение,
  • поддерживает ВИМ и neovim,
  • можно использовать полная команда 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

если вы загружаете свои плагины из a .vimrc файл, что вы могли бы сделать, это поставить q на какой-то части строки через файл, чтобы заставить его выйти, так что вы можете использовать таймер процесса, как unix

есть плагин для профилирования времени запуска vim.

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

это может быть удобно для отслеживания --startime при открытии конкретного файла

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

разве нет Баш time команда, которую можно использовать так:

time vim

EDIT: не включает время запуска скриптов. Вместо этого используйте предложение @jamessan.