Как узнать, какие плагины делают Vim медленным?

318

Есть ли способ профилировать плагины Vim?

Мой MacVim становится все медленнее и медленнее, когда я открываю большой .py. Я знаю, что могу отменить выбор всех плагинов и повторно выбрать один за другим, чтобы проверить, какой плагин является виновником, но есть ли более быстрый способ?

Мой dotvim здесь: https://github.com/charlax/dotvim

charlax
источник
1
На самом деле, запуск в порядке. Vim становится медленным после нескольких минут использования. Особенно это касается .pyфайлов.
Чарлакс
Бинарный поиск - это путь. Вы задали свой вопрос 2 часа назад, причина вашей проблемы была бы найдена в это время. autocmdПредчувствие Инго Карката кажется мне наиболее правдоподобным.
Ромен
Это правда - но разве вы не думаете, что если есть способ получить тот же результат даже через час, это лучше? Более того, запуск в порядке, это через несколько минут использования, так что это заняло бы очень много времени. autocmdвыглядит круто. Только что попробовал, но сейчас Вим не спешит.
Чарлакс
1
Только что столкнулся с той же проблемой, но на больших рубиновых файлах. Обнаружено, что folding=syntaxможет замедлиться. Попробовал folding=manualи теперь все отлично работает
Александр К.

Ответы:

496

Вы можете использовать встроенную поддержку профилирования: после запуска vim do

:profile start profile.log
:profile func *
:profile file *
" At this point do slow actions
:profile pause
:noautocmd qall!

(в отличие от выхода, на noautocmdсамом деле не требуется, он просто ускоряет выход vim).

Примечание: вы не получите информацию о функциях, которые были удалены до выхода из vim.

ZYX
источник
13
Это потрясающе. Я смог увидеть, что виноваты EasyTags. Большое спасибо!
Чарлакс
5
это помогло мне обнаружить "vim-gitgutter" как засорение.
Себастьян Гриньоли
6
@subjectego :set more | verbose function {function_name}покажет вам содержимое функции и где оно находится.
ZyX
26
Если неясно, в результате profile.logполучается файл в текущем каталоге вашего сеанса Vim.
Мика Смит
7
Перейти к концу, profile.logчтобы увидеть список функций, отсортированных по общему времени ( profile.logмне показалось бесполезным, пока я не нашел его, в конце есть отсортированный список).
Андрей Портной
78

Я нашел другой очень полезный метод vim buildin, чтобы показать точное время сообщения при загрузке вашего .vimrc.

vim --startuptime timeCost.txt timeCost.txt

Пожалуйста, запустите:

:help --startuptime

в VIM, чтобы получить больше информации.

Feihu
источник
3
На всякий случай, если кому-то еще интересно, его нет во всех дистрибутивах vim / gvim. Здесь нет в продаже Win Gvim 7.4 (хотя это задокументировано в viminfo)
thynctank
1
@thynctank Я попробовал на моем gvim 7.4, и это сработало. Вот моя версияIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
фейху
Лучший ответ! Помог мне определить самый медленный плагин, который злил меня при каждом запуске vim. Спасибо :)
kovpack
Это и основные -Vпоказало , что он был нелокальной $HOMEпричиной проблемы
BSB
Вам нужно выполнить, :eчтобы обновить файл. Сортируйте файл на месте в соответствии с общим временем, затраченным на каждую операцию, примерно так:%! sort -k2 -nr
Ашутош Джиндал,
31

Это может быть плагин или подсветка синтаксиса; Попробуйте, :syntax offкогда это произойдет, и посмотрите, станет ли Vim быстрее.

В случае с плагинами «общая медлительность» обычно происходит от автокоманд; а :autocmdсписки всех. Расследуйте, убивая некоторых из них с помощью :autocmd! [group] {event}. Переходите от более частых событий (например CursorMoved[I]) к менее частым (например BufWinEnter).

Если вы можете достаточно надежно воспроизвести медлительность, может помочь бинарный поиск: уберите половину файлов ~/.vim/plugin/, затем другую, повторите в наборе, который был медленным.

Если вам действительно нужно заглянуть под капот, найдите версию Vim с :profileвключенной командой. (Не в стандартной версии BIG для Windows, а в той, что поставляется с Cygwin; она также легко компилируется в большинстве дистрибутивов.)

Инго Каркат
источник
17

Я нашел полезным распечатать все действия Vim в файл, запустив Vim с -Vопцией:

vim -V12log

Это обеспечивает максимальную детализацию (уровень 12) и выводит ее в файл log. Затем вы можете выполнить некоторые действия Vim, которые, как вы знаете, являются медленными, а затем посмотреть, какие функции / отображения вызываются изнутри.

Принц гуляш
источник
10
но нет времени на бревне
Kokizzu
7

Если у вас проблемы с ^Lмедленным обновлением экрана ( прокруткой и т. Д.), Возможно, проблема в неэффективном файле подсветки синтаксиса. Вы можете проверить это, временно отключив подсветку синтаксиса ( :syn off) и посмотрев, исчезла ли проблема; если вы хотите углубиться в детали, вы можете профилировать текущий файл синтаксиса, используя :syntime:

  1. Откройте файл, который вызывает синтаксическое выделение проблем с производительностью.
  2. Запустите, :syntime onчтобы начать профилирование.
  3. Прокрутите файл немного.
  4. Запустите :syntime reportдля создания отчета. Шаблоны, перечисленные первыми в отчете, - это те, которые заняли больше всего времени для обработки.
сумеречный
источник
2
Если кажется, что виновником является файл выделения синтаксиса, каковы дальнейшие действия?
Spectator6