Jak sprawdzić, które wtyczki spowalniają Vima?


318

Czy istnieje sposób na profilowanie wtyczek Vima?

Mój MacVim staje się wolniejszy, gdy otwieram duży .py. Wiem, że mogłem odznaczyć wszystkie wtyczki i ponownie wybrać jeden po drugim, aby sprawdzić, która wtyczka jest winowajcą, ale czy istnieje szybszy sposób?

Mój dotvim jest tutaj: https://github.com/charlax/dotvim



1
W rzeczywistości uruchomienie jest w porządku. Vim staje się wolny po kilku minutach użytkowania. Dotyczy to zwłaszcza .pyplików.
— charlax

Najlepszym rozwiązaniem jest wyszukiwanie binarne . Zadałeś pytanie 2 godziny temu, przyczyna twojego problemu zostałaby znaleziona w tym czasie. Przeczucie Ingo Karkata autocmdbrzmi dla mnie najbardziej prawdopodobne.
— romainl

To prawda - ale czy nie sądzisz, że jeśli istnieje sposób na uzyskanie tego samego wyniku nawet w ciągu godziny, to lepiej? Co więcej, uruchomienie jest w porządku, po kilku minutach użytkowania, więc zajęłoby to bardzo dużo czasu. autocmdWygląda fajnie. Po prostu spróbowałem, ale Vim nie jest teraz wolny.
— charlax

1
Właśnie napotkałem ten sam problem, ale na dużych plikach ruby. Znaleziono, że folding=syntaxmoże zwolnić. Próbowałem folding=manuali teraz wszystko działa dobrze
— Aleksandr K.

Odpowiedzi:


496

Możesz użyć wbudowanej obsługi profilowania: po uruchomieniu vima do

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

(w przeciwieństwie do rzucenia, noautocmdnie jest tak naprawdę wymagane, po prostu przyspiesza zamknięcie vima).

Uwaga: nie otrzymasz informacji o funkcjach, które zostały usunięte przed zamknięciem vima.


13
To jest niesamowite. Widziałem, że winowajcą jest EasyTags. Wielkie dzięki!
— charlax

5
pomogło mi to wykryć „vim-gitgutter” jako zator.
— Sebastián Grignoli,

6
@ subjectego :set more | verbose function {function_name}pokaże ci zawartość funkcji i jej lokalizację.
— ZyX

26
Jeśli nie jest jasne, powstaje profile.logplik w bieżącym katalogu sesji Vima.
— Micah Smith

7
Przejdź na koniec, profile.logaby zobaczyć listę funkcji posortowanych według całkowitego czasu ( profile.logwydawało mi się bezużyteczne, zanim znalazłem, że na końcu jest posortowana lista).
— Andrey Portnoy

78

Znalazłem inną bardzo przydatną metodę kompilacji vima, która wyświetla dokładnie komunikaty czasowe podczas ładowania .vimrc.

vim --startuptime timeCost.txt timeCost.txt

Uruchom:

:help --startuptime

w VIM, aby uzyskać więcej informacji.


3
Na wypadek, gdyby ktoś się zastanawiał, nie istnieje to we wszystkich dystrybucjach vim / gvim. Nie ma na stanie Wygraj Gvim 7.4 tutaj (chociaż jest to udokumentowane w viminfo)
— thynctank

1
@thynctank Próbowałem na moim gvim 7.4 i zadziałało. Oto moja wersjaIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
— feihu

Najlepsza odpowiedź! Pomógł mi zidentyfikować najwolniejszą wtyczkę, która denerwowała mnie przy każdym uruchomieniu vima. Dzięki :)
— kovpack 27.07.16

To i podstawowe -Vpokazały, że $HOMEprzyczyną problemu był problem
— nielokalny

Musisz wykonać, :eaby odświeżyć plik. Posortuj plik zgodnie z łącznym czasem wymaganym dla każdej operacji tak:%! sort -k2 -nr
— Ashutosh Jindal

31

Może to być wtyczka lub wyróżnianie składni; spróbuj, :syntax offkiedy to się stanie, i sprawdź, czy Vim natychmiast staje się szybszy.

W przypadku wtyczek „ogólna powolność” zwykle pochodzi z poleceń automatycznych; A :autocmdich wszystkich listach. Zbadaj, zabijając niektóre z nich za pośrednictwem :autocmd! [group] {event}. Przejdź od częstszych zdarzeń (tj. CursorMoved[I]) Do rzadszych (np BufWinEnter.).

Jeśli możesz w nieco niezawodny sposób odtworzyć powolność, wyszukiwanie binarne może pomóc: Przenieś połowę plików do ~/.vim/plugin/, a następnie powtórz w powolnym zestawie.

Jeśli naprawdę potrzebujesz zajrzeć pod maską, uzyskaj wersję Vima z :profilewłączonym poleceniem. (Nie jest to waniliowa DUŻA wersja Windows, ale ma ją ta, która jest dostarczana z Cygwinem; także samodzielna kompilacja jest dość łatwa w większości dystrybucji).


17

Pomocne jest wydrukowanie całej aktywności Vima do pliku, uruchamiając Vima z -Vopcją:

vim -V12log

Zapewnia to maksymalną gadatliwość (poziom 12) i wysyła ją do pliku log. Następnie możesz wykonać pewne działania Vima, o których wiesz, że są powolne, a następnie zobaczyć, które funkcje / mapowania są wywoływane wewnętrznie.


10
ale w dzienniku nie ma czasu
— Kokizzu,

7

Jeśli masz problemy z ^Lpowolnymi operacjami aktualizacji ekranu ( przewijaniem itp.), Przyczyną może być nieefektywny plik podświetlania składni. Możesz to przetestować, tymczasowo wyłączając podświetlanie składni ( :syn off) i sprawdzając, czy problem zniknie; jeśli chcesz zagłębić się w szczegóły, możesz profilować bieżący plik składni za pomocą :syntime:

  1. Otwórz plik, który powoduje problemy z podświetlaniem składni.
  2. Uruchom, :syntime onaby rozpocząć profilowanie.
  3. Przewiń trochę plik.
  4. Uruchom, :syntime reportaby wygenerować raport. Wzory wymienione na początku w raporcie zajęły najwięcej czasu.

2
Jeśli wydaje się, że winowajcą jest plik podświetlenia składni, jaki jest następny sposób postępowania?
— Spectator6
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.