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

charlax
źródło
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.

ZyX
źródło
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.

feihu
źródło
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).

Ingo Karkat
źródło
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.

Książę Gulasz
źródło
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.
Duskwuff -inactive-
źródło
2
Jeśli wydaje się, że winowajcą jest plik podświetlenia składni, jaki jest następny sposób postępowania?
Spectator6