Opóźnienie ruchu punktu Emacsa (kursora)

12

Podczas uruchamiania previous-line, C-pczy <up>kursor skacze w górę linię bez żadnych problemów i opóźnień. Podczas uruchamiania next-line, C-nczy <down>kursor odpowiednio zeskakuje linię, ale ze znacznym opóźnieniem. Kiedy trzymam wciśnięty klawisz, nie widzę nawet punktu, który się porusza, po prostu pojawia się gdzieś poniżej. Uruchomiłem profilera Emacsa i wygląda na to, że winowajcą jest cl-position. Okazuje się, że previous-linedosłownie porusza kursorem, a jednocześnie next-lineuruchamia wiele funkcji.

Wyjście profilera

Na czym polega problem i jak można go naprawić?

Damian Chrzanowski
źródło
Używasz visual-line-mode? Czy masz jakieś bardzo długie linie?
Drew
Nie używam visual-line-modei nie mam długich linii.
Damian Chrzanowski

Odpowiedzi:

23

Znalazłem odpowiedź na moje pytanie, zawężając niegrzeczny kawałek i googlując. Udało mi się zmniejszyć opóźnienie 10 razy !!!! Mam na myśli ... To szaleństwo, ile mocy obliczeniowej next-lineużył do przesunięcia kursora w dół?!?!

Poprawka:

Umieść ten kod w pliku init.el: (setq auto-window-vscroll nil)

Dowód:

Lag znacznie się zmniejszył

Teraz next-linenie uruchamia, line-move-partialdlatego zmniejsza opóźnienie. Nie pamiętam konfigurowania auto-window-vscrolldo t. Nie było go nigdzie w żadnym z moich .elplików, nie jestem pewien, jak to się tzaczęło. Więc jeśli ktoś ma problemy z wydajnością ruchu kursora, powyższa poprawka zmniejszy opóźnienie z około 50% -80% czasu procesora do 5% czasu procesora !!!

Aby szybko sprawdzić, czy masz na to wpływ, po prostu uruchom C-h v auto-window-vscroll. Jeśli jest ustawiony, tmożesz mieć poważne problemy z wydajnością. Sprawdź za pomocą profilera Emacsa, czy ruch kursora rzeczywiście powoduje opóźnienie.

Życzymy powodzenia innym miłośnikom Emacsa !!!

Źródło poprawki

Damian Chrzanowski
źródło
Proszę rozważyć złożenie Emacs błędów (lub prośbę powiększenia) do tego: M-x report-emacs-bug.
Drew
2
Zrobię, ponieważ widzę, że jest to problem dla wielu ludzi.
Damian Chrzanowski
1
Dzięki, Damian, poprawia wydajność, ale nadal czuję się trochę niereagujący
Neeraj Verma
3

Nie jestem absolutnie pewien, na czym polega problem, ale twój raport profilera wydaje się wskazywać, że posn-at-point wykonuje więcej ponownego wyświetlania niż oczekiwano, co z kolei powoduje ponowne obliczenie linii trybu i że linia energetyczna powinna więcej wysiłku zapamiętywać jego obliczenia dla modeliny.

IOW, sugeruję ci, M-x report-emacs-buga ty możesz również zgłosić błąd do opiekunów linii energetycznej.

Stefan
źródło
0

Wygląda na to, że używasz powerline. W szczególności wyświetlasz nazwę projektu pocisku w swojej modelinie. Ostatnio wprowadzono pewne ulepszenia do pakietu pocisków, które złagodziły niektóre z nich. Upewnij się, że jesteś na bieżąco.

https://github.com/bbatsov/projectile/issues/1212

https://github.com/bbatsov/projectile/pull/1213

Możliwe jest również zapamiętanie funkcji wywoływanych przez modelkę. Zrobiłem to dużo na mojej modelce, aby było bardzo szybkie.

Aaron Jensen
źródło
Problem został już rozwiązany, pocisk lub linia zasilająca nie stanowiły problemu
Damian Chrzanowski
Cieszę się, że to załatwiłeś. Twój profil wskazywał na spowolnienie pochodzące z pocisku. Możliwe, że ustawienie auto-window-vscroll na zero powoduje, że emacs pomija niepotrzebne obliczenia linii trybu. W każdym razie, cieszę się, że masz to uporządkowane!
Aaron Jensen
To dobra uwaga. Naprawdę nie miałem czasu, aby sprawdzić, który pakiet był problemem. Dziękuję za sugestie!
Damian Chrzanowski
0

Zauważyłem, że mój doom-modelinerównież przyczynia się do opóźnienia. W rzeczywistości jest powiedziane w dokumencie doom-modeline:

 ;; If it brings the sluggish issue, disable `doom-modeline-enable-word-count' or
 ;; remove the modes from `doom-modeline-continuous-word-count-modes'.

Po ustawieniu (setq doom-modeline-enable-word-count nil)zauważyłem wyraźne przyspieszenie ruchów kursora.

Jason
źródło