Pakiet wielu kursorów powoduje, że emacs działa wolno

9

Korzystam z pakietu Multiple Cursors w pliku html i jest świetny dla kilku kursorów, ale jeśli utworzę więcej niż 30 lub 50 kursorów, robi się to strasznie wolno i przesuwanie kursorów zajmuje około pięciu lub sześciu sekund.
Czy używam go źle, czy po prostu nie jest przygotowany do stworzenia tylu kursorów ?.

Fabman
źródło
2
To zależy od tego, co dzieje się w buforze - niektóre bufory są po prostu trudniejsze dla wielu kursorów Magnara. Czasami mogę mieć kilkaset bez znaczącego spowolnienia, a czasem tylko kilka (powiedzmy wdired-mode) powoduje spowolnienie. Istnieje otwarte żądanie funkcji - debbugs.gnu.org/cgi/bugreport.cgi?bug=22873 - w celu przeniesienia wielu możliwości kursora do kodu źródłowego C, ale w tej chwili jest to wciąż dyskusja. Jednym z moich proponowanych punktów sprzedaży dla zespołu programistów Emacsa był potencjalny wzrost prędkości, gdyby został upieczony w bazie kodu C.
prawnik
3
Nie mam rozwiązania, ale chciałem również potwierdzić tę samą powolność. Nie zdziwiłbym się, gdyby problem dotyczył problemów z blokowaniem czcionek. Kiedy globalnie wyłączam blokadę czcionek, kursory znów stają się bardziej ruchliwe.
Użytkownik Emacsa,
1
... w takim przypadku wiele kursorów nie powodowałoby spowolnienia bezpośrednio (nawet jeśli spowolnienie okazuje się być czynnikiem, gdy go używasz). Zrobiłbym M-x profiler-starti zrobiłem kilka powolnych rzeczy, a następnie M-x profiler-report, i dalej wnikałem w elementy, zajmując większość czasu procesora, aż będziesz mógł odizolować je do określonej biblioteki (jeśli istnieje); następnie spróbuj wyłączyć tę bibliotekę. Nie zapomnij zatrzymać profilera, gdy go skończysz.
phils

Odpowiedzi:

5

Listę mniejszych trybów, które nie działają dobrze w trybie wielu kursorów, można ustawić za pomocą mc/unsupported-minor-modes. Wszystkie tryby dodane do tej listy zostaną wyłączone po wejściu w tryb wielu kursorów, zostaną one ponownie włączone po wyjściu z trybu wielu kursorów.

Możesz dodać element do tej listy w ten sposób

(add-to-list 'mc/unsupported-minor-modes 'flyspell-mode)

Ma to duży wpływ na szybkość reakcji wielu trybów kursorów. Odkryłem, że dwa mniejsze tryby mające największy wpływ to tryb linum i zaklęcie flyspell.

Charles Ritchie
źródło
Jeśli ktoś mógłby spróbować wyjaśnić, dlaczego flyspell spowalnia rzeczy (lub podać zwięzły przepis na odtworzenie powolności za pomocą flyspell), być może moglibyśmy spróbować rozwiązać problem.
Stefan
1
Próbowałem profilować powolność, ale nie udało mi się znaleźć żadnego spójnego wzoru. To powiedziawszy, powolność wprowadzona przez flyspell nie jest taka zła, moduł, który uważam za zdecydowanie gorszy, to tryb linum. Wyłączenie trybu linum pozwoliło mi przejść z 30 kursorów jednocześnie do ponad 600.
Charles Ritchie
Powtarzalny przepis przeszedłby długą drogę.
Stefan
1
Dziękuję za pomoc!. wydaje się, że to był problem. Tryb wcięcia i tryb Linum, w którym muszę wyłączyć (wyłączyłem wcięcie i zastąpiłem Linum nlinum). Teraz mogę mieć setki kursorów bez żadnych opóźnień.
Fabman
0

... ponad 30 lub 50 kursorów robi się strasznie powolny ...

Oto rozwiązanie tymczasowe: dostosuj tę zmienną

mc/max-cursors

do wartości mniejszej niż 30 jako obejście problemu. Wartość domyślna to zero, co oznacza brak limitu. Rzeczywista liczba do przywrócenia prędkości zależy od typu bufora, użytych czcionek i wszystkiego, co w danym momencie działa. W każdym razie problem, który masz, został szeroko zgłoszony.

Użytkownik Emacsa
źródło