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ć?


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


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.


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.


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.

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.