Retardo de movimiento del punto Emacs (cursor)

12

Cuando se ejecuta previous-line, C-po <up>el cursor salta una línea sin problemas ni retrasos. Cuando se ejecuta next-line, C-no <down>el cursor salta correctamente una línea, pero con un retraso significativo. Cuando presiono la tecla hacia abajo, ni siquiera puedo ver el punto en movimiento, solo aparece en algún lugar debajo. Ejecuté el generador de perfiles de Emacs y parece que el culpable es cl-position. Resulta que es que previous-lineliteralmente solo mueve el cursor, mientras next-lineejecuta muchas funciones.

Salida de perfilador

¿Cuál es el problema y cómo se puede solucionar?

Damian Chrzanowski
fuente
Estas usando visual-line-mode? ¿Tienes algunas líneas muy largas?
Dibujó
No uso visual-line-modey no tengo largas colas.
Damian Chrzanowski

Respuestas:

23

He encontrado una respuesta a mi pregunta al reducir la parte traviesa y buscar en Google. ¡He logrado reducir el retraso 10 VECES! Quiero decir ... ¿Es una locura la cantidad de potencia informática que next-linese usaba para mover el cursor hacia abajo?

La solución:

Pon este código en tu init.el: (setq auto-window-vscroll nil)

La prueba:

El retraso se redujo significativamente

Ahora next-lineno se dispara, line-move-partialpor lo tanto, reduce el retraso. No recuerdo la creación de auto-window-vscrolla t. No estaba en ninguna parte de ninguno de mis .elarchivos, no estoy seguro de cómo se configuró tpara empezar. Entonces, si alguien tiene problemas de rendimiento con el movimiento del cursor, ¡entonces la solución anterior reducirá el retraso de aproximadamente 50% -80% de tiempo de CPU a 5% de tiempo de CPU!

Para comprobar rápidamente si está afectado, simplemente ejecute C-h v auto-window-vscroll. Si está configurado, tes posible que tenga problemas de rendimiento importantes. Verifique con el generador de perfiles de Emacs si el movimiento del cursor realmente causa un retraso.

¡Mucha suerte, compañeros amantes de Emacs!

Fuente de arreglo

Damian Chrzanowski
fuente
Por favor considerar la presentación de un fallo de Emacs (o solicitud de mejora) para esto: M-x report-emacs-bug.
Dibujó el
2
Lo haré, ya que puedo ver que esto es un problema para mucha gente.
Damian Chrzanowski
1
Gracias, Damian, mejora el rendimiento, pero aún siento un poco de falta de respuesta
Neeraj Verma
3

No estoy completamente seguro de cuál es el problema, pero su informe de perfil parece indicar que posn-at-point realiza una nueva visualización de lo esperado, lo que a su vez provoca la recalculación de la línea de modo, y esa línea eléctrica debería hacer más esfuerzos para memorizar su cálculo para la línea de modelo.

IOW, te sugiero M-x report-emacs-bugy también puedes informar un error a los encargados del mantenimiento de la línea eléctrica.

Stefan
fuente
0

Parece que estás usando powerline. En particular, está mostrando el nombre del proyecto del proyectil en su línea de modelo. Recientemente ha habido algunas mejoras en el paquete de proyectiles que han mitigado algo de eso. Asegúrate de estar al día.

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

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

También es posible memorizar funciones que llama la línea de modo. He hecho esto mucho en mi línea de modelo para hacerlo muy rápido.

Aaron Jensen
fuente
El problema ya se ha resuelto, el proyectil o la línea eléctrica no eran el problema
Damian Chrzanowski el
Me alegra que lo hayas solucionado. Su perfil apuntó a la desaceleración proveniente del proyectil. Podría ser que establecer auto-window-vscroll en nil solo haga que emacs omita cálculos innecesarios de línea de modo. De cualquier manera, ¡me alegra que lo hayas solucionado!
Aaron Jensen el
Ese es un buen punto. Realmente no tuve tiempo para verificar qué paquete era el problema. ¡Gracias por las sugerencias!
Damian Chrzanowski
0

Me di cuenta de que mi doom-modelinetambién está contribuyendo al retraso. De hecho, se dice en el documento de 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'.

Después de configurar (setq doom-modeline-enable-word-count nil), obtuve una notable aceleración en los movimientos del cursor.

Jason
fuente