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

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

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

Мой dotvim находится здесь: https://github.com/charlax/dotvim

Ответ 1

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

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

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

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

Ответ 2

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

vim --startuptime timeCost.txt timeCost.txt

Запустите:

:help --startuptime

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

Ответ 3

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

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

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

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

Ответ 4

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

vim -V12log

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