¿Cómo puedo evitar que el modo python resalte ocasionalmente todo como una cadena?


7

Lo uso python-modepara mi código de Python, y de vez en cuando el resaltador de sintaxis se confunde y piensa que todo en el búfer es un literal de cadena. Esto normalmente parece suceder cuando creo una cadena de documentos; durante unos segundos después de escribir las comillas, todo después del cursor se resalta como una cadena.

¿Hay alguna manera de evitar esto por completo? O, si no, ¿hay alguna forma de hacer que emacs / python-mode se recupere más rápidamente?

ed: Para ser claros, el resaltado incorrecto persiste incluso después de que se hayan cerrado las comillas y se haya guardado el búfer. Pero, de nuevo, esto no es todo el tiempo, sólo a veces.


55
¿Quieres decir después de escribir las comillas de apertura? Porque, en ese caso, el resto del búfer es una cadena (doc). Puede resolver esto haciendo que Emacs inserte automáticamente las comillas de cierre después de su cursor o algo así.
Tikhon Jelvis el

No, el resaltado persiste a veces durante varios segundos después de que se hayan cerrado las citas (aunque actualmente no tengo emacs para insertarlas)
Abingham

Ugh, algo similar me sucede todo el tiempo cuando estoy en un REPL y accidentalmente imprimo un montón de texto. No estoy seguro de si está relacionado, pero tal vez este problema es más general que simplemente python-mode.
purple_arrows

Punto interesante Probé un poco el modo c ++, y parece tener el mismo comportamiento. Si dejo un literal de cadena "abierto" el tiempo suficiente, el resto del búfer se resalta como parte de la cadena (lo cual tiene mucho sentido). Después de cerrar el literal, el resaltado puede tardar varios segundos en recuperarse. Parece, entonces, que hay un temporizador que le dice a emacs que vuelva a analizar / resaltar el búfer.
abingham

¿Has intentado informar este error?
Dmitry

Respuestas:


6

Cuando modifica el búfer, solo las líneas que modificó se vuelven a resaltar de inmediato. Si la modificación afecta el resaltado de líneas más abajo, estas se resaltan más tarde a través de un temporizador inactivo (es decir, ocurre después de que deja de escribir).

Este retraso está controlado por jit-lock-context-timey tiene un valor predeterminado de 0.5s. Tenga en cuenta que realmente significa "Emacs ha estado inactivo durante medio segundo", por lo tanto, mientras siga dando comandos de Emacs sin dejar más de medio segundo entre los comandos, no se volverá a resaltar.

Si crees que lleva más de 0,5 segundos y puedes encontrar una receta que desencadene este retraso excesivo, entonces querrás hacerlo M-x report-emacs-bug.

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.