Как я могу устранить неполадки в очень медленном Emacs?

42

Я пишу документ, и у меня есть проблема с производительностью Emacs, которая, как мне кажется, появилась только вчера. Я не сделал никаких изменений в моем файле инициализации или установил новые пакеты.

Проблема в том, что, когда я пишу, существует очень заметная задержка между нажатием букв на клавиатуре и отображением их на экране. Иногда я наблюдаю, как они все еще печатают на экране после того, как я закончил набирать слово.

Я не знаю, есть ли другие проблемы, кроме скорости печати (я могу только догадываться, что они есть), но я их не заметил.

Что может вызвать эту проблему?
Это связано с Emacs или с производительностью моего компьютера? Каковы переменные, влияющие на производительность Emacs?

Моя версия Emacs - это GNU Emacs 24.3.1

Основной активный режим:

  1. Латекс

и второстепенные активные режимы:

  1. Auto-Complete
  2. Авто-композиция
  3. Автоматическое сжатие
  4. Авто-шифрование
  5. Blink-курсор
  6. Файл-имя-Shadow
  7. Font-Lock
  8. Global-Auto-Complete
  9. Global-Font-Lock Global-Hl-Line
  10. Номер строчки
  11. Колесико мыши
  12. Shell-Dirtrack
  13. Шоу-Paren
  14. Smartparens
  15. Smartparens-Global
  16. Подсказка Transient-Mark
Адам
источник
5
C-h mпокажет основной режим и все второстепенные режимы, которые активны. Вы можете медленно отключать каждый второстепенный режим, пока не найдете причину. Это может быть основной режим, но второстепенные режимы являются наиболее вероятными подозреваемыми. Без указания того, какие режимы вы используете, кто-нибудь здесь будет просто в темноте нанести удар по тому, что происходит с вашей проблемой. У меня есть редкая ситуация, которая возникает с некоторыми специальными изображениями - например, когда кто-то отправляет мне электронное письмо с символом телефона или другими специальными символами в iPhone - но это отдельная проблема замедления, вызванная специальными символами.
юрист
2
linum-modeзамедляет производительность в больших буферах. nlinum-modeнаписанный Стефаном лучше для больших буферов.
юрист
Что происходит на вашем компьютере? Сколько памяти используется? Насколько активен ваш процессор и какие программы отвечают за его большую часть использования? Проблема вполне может быть в какой-то другой программе.
Дейв
2
О, я только что опубликовал эту ссылку в другой ветке: gnu.org/software/emacs/manual/html_node/elisp/Profiling.html - это было бы хорошим началом. Кроме того, выстрел в темноте: попробуйте отключить блокировку шрифтов gnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html - это мой первый обычный подозреваемый (который часто оправданно занимает большинство циклов ЦП ).
wvxvw
1
Большое количество предложений в этих комментариях показывает, что этот вопрос слишком расплывчатый. Я изменил название, чтобы попросить инструкции, а не решение. Я также дал ответ соответственно. Пожалуйста, задайте новый вопрос, как только вы выполнили эти инструкции, или оставьте комментарий, если они не были ясны.
Малабарба

Ответы:

65

Что может вызвать эту проблему? Это связано с Emacs или с производительностью моего компьютера? Каковы переменные, влияющие на производительность Emacs?

Emacs имеет около 50 000 внутренних переменных и несколько тысяч внешних пакетов, усредненных по нескольким дюжинам переменных в каждой. Вы не можете ожидать, что кто-то ответит на это в общем смысле. :-)

Вы можете увидеть это, просто взглянув на ветку комментариев под своим вопросом. Там есть полдюжины разных предложений, все одинаково действительны.

Что вы можете сделать, чтобы точно определить проблему?

Вариант 1: отключить режимы

Начните отключать те второстепенные режимы, которые вы перечислили, и посмотрите, какой из них решает проблему с производительностью. Я хотел бы начать с smartparens, auto-complete, line-numberи font-lock, а затем следуют вниз по списку.

«У меня не было этой проблемы вчера» означает очень мало, не полагайтесь на это слишком сильно. Просто начните отключать второстепенные режимы, пока что-то не решит.

Если ни один из второстепенных режимов не устранил вашу проблему, то начните комментировать части вашего файла инициализации, пока не выясните, какой фрагмент вызвал это. В любом случае, задавайте новый вопрос, когда у вас есть что-то более конкретное.

Вариант 2: профилировщик

  1. Вызывать M-x profiler-start RET RET(второе RETподтверждение cpu);
  2. Наберите текст, желательно целый абзац или более;
  3. Invoke M-x profiler-report.

Это даст вам буфер, описывающий время процессора для каждой функции. Нажатие TABна строку расширяет ее для отображения функций внутри нее. Перемещайтесь по этому буферу, пока не выясните, какая функция отнимает так много времени процессора.

Что мне делать потом?

Как только вы найдете функцию, пакет или фрагмент, вызывающий задержку, вы можете (без определенного порядка):

  • Задайте новый вопрос здесь относительно этого специфического вспомогательного режима (или функции или фрагмента).
  • Сообщить об ошибке сопровождающему пакета.
    • Проверьте комментарии в верхней части исходного файла пакета. Если он содержит URL (особенно на github), то, вероятно, там есть система отслеживания проблем.
    • Некоторые пакеты предлагают команду вроде M-x PACKAGE-bug-report.
    • Его или ее адрес электронной почты должен быть в верхней части исходного файла пакета.
  • Если это встроенный пакет, вы можете сообщить об этом M-x report-emacs-bug.
  • Даже для пакетов, которые не являются встроенными, вы можете обратиться за помощью в help-gnu-emacsсписок рассылки.
Malabarba
источник
4
Это отличные инструкции. Большое спасибо! Как я уже сказал в комментариях к моей цитате, я не знал, что она будет неопределенной. Я думал, что ответ будет элементарным для кого-то эксперта по Emacs (как и многие из вас). В любом случае этот «гид» великолепен, и я рад, что мой вопрос привел к этому. :)
Адам
3
+100000 за использование профилировщика. Если вы глупы (как я) и случайно делаете что-то вроде добавления дорогого вызова функции в строку режима в каждом буфере, это наверняка способ выяснить, что происходит.
Радон Росборо
Как отключить второстепенный режим? Включены второстепенные режимы: Async-Bytecomp-Package. Автозаполнение. Автокомпозиция. Автокомпрессия. Имя файла-Теневая муха Проверка Flyspell Font-Lock Global-Auto-Complete Global-Auto-Revert Global-Eldoc Global-Flycheck Global-Font-Lock Global -Git-Commit Global-Hl-Line Global-Hungry-Удалить Global-Linum Номер строки Linum Magit-Auto-Revert-Org-Bullets Org-Indent Override-Глобальный снаряд Pyvenv Recentf Сохранить-Поместить Shell-Dirtrack Показать-Paren Show-Smartparens Шоу-Smartparens-Global-Размер Индикация Smartparens-Smartparens-Global
Страйкер