Як побачити, які плагіни роблять Vim повільним?


318

Чи є спосіб профілювати плагіни Vim?

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

Мій dotvim тут: https://github.com/charlax/dotvim



1
Власне, запуск прекрасний. Vim стає повільним після декількох хвилин використання. Особливо це стосується .pyфайлів.
шарлакс

Двійковий пошук - це шлях. Ви поставили своє запитання 2 години тому, причина вашої проблеми була б знайдена в той час. Охота Інго Каркат autocmdзвучить як найгірше для мене.
romainl

Це правда - але ви не думаєте, що якщо є спосіб досягти однакового результату навіть за одну годину, це краще? Більше того, запуск прекрасний, він проходить через кілька хвилин використання, тому це зайняло б дуже багато часу. 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.


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, щоб отримати більше інформації.


3
Про всяк випадок, коли хтось цікавиться, це не існує у всіх дистрибутивах vim / gvim. Немає на складі Win Gvim 7.4 тут (хоча це зафіксовано у viminfo)
thynctank

1
@thynctank Я спробував на своєму гвімі 7.4, і він спрацював. Ось моя версіяIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
feihu

Найкраща відповідь! Допоміг мені виявити найповільніший плагін, який розлючував мене при кожному запуску vim.
Дякую

Це і основне -Vпоказало, що це $HOMEпроблема не локальна, що викликає проблему
bsb

Потрібно виконати, :eщоб оновити файл. Сортуйте файл у відповідності до загального часу, проведеного для кожної опції, так:%! sort -k2 -nr
Ashutosh Jindal,

31

Це може бути плагін або виділення синтаксису; спробуйте, :syntax offколи це станеться, і подивіться, чи Vim миттєво стає швидшим.

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

Якщо ви зможете трохи надійно відтворити повільність, може допомогти двійковий пошук: відсуньте половину файлів ~/.vim/plugin/, а потім інші, повторіть у наборі, який був повільним.

Якщо вам дійсно потрібно заглянути під капот, отримайте версію Vim, у якій :profileвключена команда. (Не ванільна велика версія 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
Якщо здається, що винуватець синтаксичного файлу є винуватцем, який наступний спосіб дії?
Глядач6
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.