Как увидеть, какие плагины делают 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, которые, как вы знаете, будут медленными, а затем посмотреть, какие функции/отображения вызываются внутренне.