Ich benutze ein kleines Skript, um die Einfügemodi auszulösen, um die Farbe der Zeilennummer zu ändern:
%Vor%Das funktioniert ganz gut und ändert meine Zeilennummer sofort , wenn ich in einen beliebigen Einfügemodus gehe und im Normalmodus auf die ursprüngliche Farbe zurückstelle.
Ich möchte das gleiche für den visuellen Modus tun:
%Vor% Grundsätzlich funktioniert das aber nicht sofort , da die Funktion an CursorMoved
ausgelöst wird. Wie könnte ich CursorLineNrColorVisual()
sofort auslösen , sobald ich einen visuellen Modus aktivieren würde?
Nachdem ich einige Zeit in :help
verbracht habe, habe ich mit folgendem Setup abgeschlossen:
Um die Farbe der Zeilennummern nach dem Verlassen des visuellen Modus wiederherzustellen, musste ich die folgenden Schritte ausführen:
updatetime=0
für CursorHold
events autocmd CursorHold
updatetime=4000
für CursorHold
events Wie schon romainl ausgeführt hat, gibt es keine Ereignisse für den visuellen Modus. Ich würde es so machen:
%Vor% Alternativ könnten Sie versuchen, einen Ausdruck ( %{CursorLineNrColorVisual}
) in 'statusline'
; das wird ziemlich oft ausgewertet.
[EDIT] Das Promptlines-Plugin verwendet diese Methode:
Da die Statuszeile jedes Mal neu gezeichnet wird, wenn ein Modus geändert wird, können Sie jedes Mal, wenn ein Modus geändert wird, einen Trigger auslösen, indem Sie %{AnyName(mode())}
in Ihrer Statuszeile hinzufügen (er wird nicht angezeigt). Dann können Sie eine Funktion AnyName
implementieren, die den aktuellen Modus filtern kann.
Als Beispiel:
[EDIT 2] Itchyny schlug vor, die anderen Methoden zu verwenden in diesem Thread, um Performanceprobleme zu vermeiden: Es wird empfohlen, den Modus zu cachen und die Funktion (zB RedrawStatuslineColors()
) sofort zu beenden.