Piszę dokument i mam problem z działaniem Emacsa, który, jak myślę, pojawił się wczoraj. Nie wprowadziłem żadnych zmian w moim pliku init ani nie zainstalowałem żadnych nowych pakietów.
Problem polega na tym, że podczas pisania mam zauważalne opóźnienie między naciśnięciem liter na klawiaturze a wyświetleniem ich na ekranie. Czasami patrzę, jak nadal drukują na ekranie po zakończeniu pisania słowa.
Nie wiem, czy są inne problemy oprócz szybkości pisania (mogę się tylko domyślić, że są), ale ich nie zauważyłem.
Co może powodować ten problem?
Czy to spowodowane przez Emacsa, czy może z powodu wydajności mojego komputera? Zasadniczo jakie zmienne wpływają na wydajność Emacsa?
Wersja mojego Emacsa to GNU Emacs 24.3.1
Głównym aktywnym trybem jest:
- Lateks
a mniejsze aktywne tryby to:
- Autouzupełnienie
- Autoskład
- Auto-kompresja
- Automatyczne szyfrowanie
- Kursor mrugnięcia
- File-Name-Shadow
- Blokada czcionek
- Global-Auto-Complete
- Global-Font-Lock Global-Hl-Line
- Numer kolejki
- Kółko w myszce
- Shell-Dirtrack
- Show-Paren
- Smartparens
- Smartparens-Global
- Etykietka Transient-Mark
źródło
C-h m
pokaże tryb główny i wszystkie mniejsze tryby, które są aktywne. Możesz powoli wyłączać każdy mniejszy tryb, dopóki nie wyśledzisz przyczyny. Może to być sam tryb główny, ale pomniejsze tryby są najbardziej podejrzanymi. Bez określenia, jakich trybów używasz, każdy tutaj po prostu dźgnąłby w ciemności, co się dzieje z twoim problemem. Mam rzadką sytuację, która występuje w przypadku niektórych specjalnych obrazów - np. Gdy ktoś przesyła mi e-mailem coś z symbolem telefonu lub innymi specjalnymi symbolami w iPhonie - ale jest to izolowany problem spowolnienia spowodowany przez specjalne symbole.linum-mode
spowalnia działanie dużych buforów.nlinum-mode
napisane przez Stefana jest lepsze dla większych buforów.Odpowiedzi:
Emacs ma około 50 000 zmiennych wewnętrznych i kilka tysięcy pakietów zewnętrznych średnio po kilkadziesiąt zmiennych, nie można oczekiwać, że ktoś odpowie na to w ogólnym sensie. :-)
Możesz to zobaczyć, patrząc na wątek komentarzy pod Twoim pytaniem. Jest tam kilka różnych sugestii, wszystkie jednakowo ważne.
Co możesz zrobić, aby wskazać problem?
Opcja 1: Wyłącz tryby
Rozpocznij wyłączanie wymienionych mniejszych trybów i sprawdź, który z nich rozwiązuje problem z wydajnością. Chciałbym zacząć
smartparens
,auto-complete
,line-number
ifont-lock
, a następnie w dół listy.„Wczoraj nie miałem tego problemu” znaczy bardzo mało, nie polegaj na nim zbyt mocno. Po prostu zacznij wyłączać drobne tryby, dopóki coś go nie rozwiąże.
Jeśli żaden z mniejszych trybów nie rozwiąże problemu, zacznij komentować fragmenty pliku init, dopóki nie dowiesz się, który fragment kodu to spowodował. W każdym razie zadaj nowe pytanie, jeśli masz coś bardziej konkretnego.
Opcja 2: profiler
M-x profiler-start RET RET
(drugiRET
to potwierdzeniecpu
);M-x profiler-report
.To da ci bufor opisujący czas procesora zajmowany przez każdą funkcję. Uderzenie
TAB
w linię rozszerza ją, aby wyświetlić funkcje w niej zawarte. Poruszaj się po tym buforze, aż dowiesz się, która funkcja zajmuje tyle czasu procesora.Co mam potem zrobić?
Gdy znajdziesz funkcję, pakiet lub fragment kodu powodujący opóźnienie, możesz (w określonej kolejności):
M-x PACKAGE-bug-report
.M-x report-emacs-bug
.help-gnu-emacs
liście mailingowej.źródło