Wie kann ich verhindern, dass der Python-Modus gelegentlich alles als Zeichenfolge hervorhebt?

7

Ich verwende es python-modefür meinen Python-Code, und hin und wieder wird der Syntax-Textmarker verwirrt und denkt, dass alles im Puffer ein String-Literal ist. Dies scheint normalerweise zu passieren, wenn ich eine Dokumentzeichenfolge erstelle. Für einige Sekunden, nachdem ich die Anführungszeichen eingegeben habe, wird alles nach dem Cursor als Zeichenfolge hervorgehoben.

Gibt es eine Möglichkeit, dies vollständig zu verhindern? Oder, wenn nicht, gibt es eine Möglichkeit, den Emacs / Python-Modus schneller wiederherzustellen?

ed: Um klar zu sein, bleibt die falsche Hervorhebung auch nach dem Schließen der Anführungszeichen und dem Speichern des Puffers bestehen. Aber auch dies ist nicht jedes Mal, nur manchmal.

Abingham
quelle
5
Meinen Sie, nachdem Sie die Eröffnungszitate eingegeben haben? Weil in diesem Fall der Rest des Puffers ist ein (doc) String. Sie können dies lösen, indem Emacs die schließenden Anführungszeichen automatisch nach Ihrem Cursor oder etwas anderem einfügt.
Tikhon Jelvis
Nein, die Hervorhebung bleibt manchmal einige Sekunden lang bestehen, nachdem die Anführungszeichen geschlossen wurden (obwohl ich derzeit keine Emacs habe, die diese für mich einfügen).
abingham
Ugh, etwas Ähnliches passiert mir die ganze Zeit, wenn ich in einer REPL bin und versehentlich eine Menge Text drucke. Ich bin mir nicht sicher, ob es damit zusammenhängt, aber vielleicht ist dieses Problem allgemeiner als nur python-mode.
lila_Pfeile
Interessanter Punkt. Ich habe den C ++ - Modus ein wenig getestet und er scheint das gleiche Verhalten zu haben. Wenn ich ein String-Literal lange genug "offen" lasse, wird der Rest des Puffers als Teil des Strings hervorgehoben (was durchaus sinnvoll ist). Nach dem Schließen des Literals kann es einige Sekunden dauern, bis die Hervorhebung wiederhergestellt ist. Es scheint also, dass es einen Timer gibt, der Emacs anweist, den Puffer neu zu analysieren / hervorzuheben.
Abingham
Haben Sie versucht, diesen Fehler zu melden?
Dmitry

Antworten:

6

Wenn Sie den Puffer ändern, werden nur die von Ihnen geänderten Zeilen sofort wieder hervorgehoben. Wenn sich die Änderung auf das Hervorheben von Zeilen weiter unten auswirkt, werden diese später über einen Leerlauf-Timer erneut hervorgehoben (dh, nachdem Sie die Eingabe beendet haben).

Diese Verzögerung wird von gesteuert jit-lock-context-timeund beträgt standardmäßig 0,5 s. Beachten Sie, dass dies wirklich bedeutet, dass "Emacs eine halbe Sekunde lang inaktiv war". Solange Sie Emacs-Befehle weitergeben, ohne mehr als eine halbe Sekunde zwischen den Befehlen zu lassen, erfolgt die erneute Hervorhebung nicht.

Wenn Sie der Meinung sind, dass es länger als 0,5 Sekunden dauert und Sie ein Rezept finden können, das diese übermäßige Verzögerung auslöst, sollten Sie dies tun M-x report-emacs-bug.

Stefan
quelle