Befehl ausführen, wenn vim in den visuellen Modus eintritt

8

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?

    
Saucier 22.03.2013, 01:20
quelle

3 Antworten

7

Nachdem ich einige Zeit in :help verbracht habe, habe ich mit folgendem Setup abgeschlossen:

%Vor%

Um die Farbe der Zeilennummern nach dem Verlassen des visuellen Modus wiederherzustellen, musste ich die folgenden Schritte ausführen:

  1. Ordnen Sie relevante Tastenbelegungen neu an, um eine "enter-visual-function"
  2. aufzurufen
  3. Beim Aufruf des visuellen Modus setzt die Funktion updatetime=0 für CursorHold events
  4. Aufruf einer "leave-visual-function" von autocmd CursorHold
  5. Beim Verlassen des visuellen Modus setzt die Funktion updatetime=4000 für CursorHold events
  6. zurück
Saucier 23.03.2013, 12:54
quelle
4

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.

    
Ingo Karkat 22.03.2013 07:44
quelle
2

[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:

%Vor%

[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.

    
user3034472 06.06.2015 04:28
quelle

Tags und Links