Emacs указывает на задержку движения курсора


12

При запуске previous-line, C-pили <up>курсор прыгает вверх линию без каких - либо проблем или задержек. При запуске next-line, C-nили <down>курсор правильно прыгает вниз линию, но со значительным отставанием. Когда я держу клавишу «вниз», я даже не вижу движущейся точки, она просто появляется где-то внизу. Я запустил профилировщик Emacs, и кажется, что виновник есть cl-position. То, что получается, это то, что previous-lineбуквально просто перемещает курсор, в то время как next-lineвыполняет множество функций.

Профилировщик вывода

В чем проблема и как ее можно исправить?


Вы используете visual-line-mode? У тебя есть очень длинные очереди?
Дрю

Я не пользуюсь visual-line-modeи у меня нет никаких длинных очередей.
Дамиан Хшановский

Ответы:


23

Я нашел ответ на свой вопрос, сузив порочный круг и погуглив. Мне удалось сократить отставание в 10 РАЗ !!!! Я имею в виду .... Это безумие от того, сколько вычислительной мощности next-lineбыло использовано для перемещения курсора вниз?!?!

Исправление:

Поместите этот код в свой init.el: (setq auto-window-vscroll nil)

Доказательство:

Лаг значительно уменьшился

Теперь next-lineне срабатывает, line-move-partialпоэтому уменьшает отставание. Я не помню настройки auto-window-vscrollв t. Его нигде не было ни в одном из моих .elфайлов, я не уверен, с чего это tначалось. Так что, если у кого-то есть проблемы с производительностью при перемещении курсора, то вышеупомянутое исправление уменьшит лаг с 50% -80% времени процессора до 5% времени процессора !!!

Чтобы быстро проверить, если вы затронуты, просто запустите C-h v auto-window-vscroll. Если он установлен, у tвас могут быть серьезные проблемы с производительностью. Проверьте с помощью профилировщика Emacs, действительно ли перемещение курсора вызывает задержку.

Желаем удачи любителям Emacs !!!

Источник исправления


Пожалуйста , рассмотреть вопрос о подаче (запрос или расширение) в Emacs об ошибке для этого: M-x report-emacs-bug.
Дрю

2
Будет, как я вижу, это проблема для многих людей.
Дамиан Хшановский

1
Спасибо, Дамиан, это улучшает производительность, но я все еще чувствую небольшую неотзывчивость
Neeraj Verma

3

Я не совсем уверен, в чем проблема, но ваш отчет профилировщика, кажется, указывает, что posn-at-point выполняет больше повторного отображения, чем ожидалось, что, в свою очередь, вызывает пересчет строки режима, и что powerline должен приложить больше усилий для запоминания его расчет для моделин.

Итак, я предлагаю вам, M-x report-emacs-bugи вы также можете сообщить об ошибке в службу поддержки Powerline.


0

Похоже, вы используете Powerline. В частности, вы отображаете имя проекта снаряда в вашей моделине. В последнее время в пакет снарядов были внесены некоторые улучшения, которые смягчили некоторые из них. Убедитесь, что вы в курсе.

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

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

Также возможно запоминать функции, которые вызывает моделин. Я сделал это много на моей моделине, чтобы сделать это очень быстро.


Проблема уже решена, Снаряд или Линия электропередачи не были проблемой
Дамиан Хшановский

Я рада, что ты это разобрал. Ваш профиль указал на замедление, вызванное снарядом. Может случиться так, что установка auto-window-vscroll на nil просто заставит emacs пропустить ненужные вычисления строки режима. В любом случае, рад, что вы получили это отсортировано!
Аарон Дженсен

Это хороший момент. У меня действительно не было времени, чтобы проверить, какой пакет был проблемой. Спасибо за предложения, хотя!
Дамиан Хшановский

0

Я заметил, что мой doom-modelineтакже способствует отставанию. На самом деле, в документе сказано 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'.

После настройки (setq doom-modeline-enable-word-count nil)я получил заметное ускорение движений курсора.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.