El paquete de múltiples cursores hace que emacs funcione lento


9

Estoy usando el paquete Multiple Cursors en un archivo html y es increíble para algunos cursores, pero si creo más de 30 o 50 cursores, se vuelve terriblemente lento y se necesitan unos cinco o seis segundos para mover los cursores.
¿Lo estoy usando mal o simplemente porque no está preparado para crear tantos cursores?


2
Depende de lo que esté sucediendo en el búfer: algunos búferes son más difíciles para los cursores múltiples de Magnar. A veces puedo tener algunos cientos sin una desaceleración significativa, y a veces solo unos pocos (digamos wdired-mode) causan desaceleración. Hay una solicitud de función abierta - debbugs.gnu.org/cgi/bugreport.cgi?bug=22873 - para mover múltiples capacidades de cursor al código fuente C, pero todavía es una discusión en curso en este momento. Uno de mis puntos de venta propuestos para el equipo de desarrollo de Emacs fue un aumento potencial en la velocidad si se integraba en la base del código C.
leyes

3
No tengo una solución, pero también quería confirmar la misma lentitud. No me sorprendería si el problema se remonta a problemas de bloqueo de fuente. Cuando desactivo el bloqueo de fuente a nivel mundial, los cursores se vuelven rápidos nuevamente.
Usuario de Emacs

1
... en cuyo caso, los cursores múltiples no estarían causando las ralentizaciones directamente (incluso si la lentitud solo resulta ser un factor cuando lo está usando). Haría M-x profiler-starty haría un montón de cosas lentas y luego M-x profiler-report, y seguiría profundizando en los elementos, ocupando la mayor parte del tiempo de la CPU hasta que pueda aislarlo en alguna biblioteca en particular (si corresponde); luego intente deshabilitar esa biblioteca. No olvides detener el generador de perfiles cuando hayas terminado con él.
phils

Respuestas:


5

Se puede configurar una lista de modos menores que no funcionan bien con el modo de cursores múltiples mc/unsupported-minor-modes. Todos los modos agregados a esta lista se deshabilitarán al ingresar al modo de cursores múltiples, se volverán a habilitar una vez que abandone el modo de cursores múltiples.

Puede agregar un elemento a esta lista así

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

Esto hace una gran diferencia en la capacidad de respuesta del modo de cursores múltiples. Encontré que los dos modos menores que tenían el mayor impacto eran el modo linum y el flyspell.


Si alguien pudiera intentar explicar por qué el flyspell hace que las cosas sean lentas (o dar una receta concisa para reproducir la lentitud con el flyspell), tal vez podríamos intentar solucionar el problema.
Stefan

1
He intentado perfilar la lentitud, pero no he podido encontrar ningún patrón coherente. Dicho esto, la lentitud introducida por flyspell no es tan mala, el módulo que encuentro mucho peor es el modo linum. Desactivar el modo linum me permitió pasar de 30 cursores a la vez a más de 600.
Charles Ritchie

Una receta reproducible sería de gran ayuda.
Stefan

1
¡Gracias por la ayuda!. Parece que este era el problema. Modo de guía de sangría y modo de Linum donde están los que tengo que desactivar (deshabilité la guía de sangría y reemplacé Linum con nlinum). Ahora puedo tener cientos de cursores sin ningún retraso.
Fabman

0

... más de 30 o 50 cursores se vuelve terriblemente lento ...

Aquí hay una solución temporal: ajuste esta variable

mc/max-cursors

a un valor inferior a 30 como solución alternativa. El valor predeterminado es nil, lo que significa que no hay límite. El número real para restaurar la velocidad depende del tipo de búfer, las fuentes utilizadas y cualquier otra cosa que se esté ejecutando en ese momento. En cualquier caso, el problema que tiene ha sido ampliamente informado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.