vim - Wie lässt sich die Farbe der Statuszeile je nach Modus am besten ändern?

940
rossijonas

Ich habe versucht, meine Vim-Erfahrung zu verbessern, indem ich versuche, die Farbe der Vim-Statuszeile jedes Mal zu ändern, wenn sich der Modus ändert.

Ich habe dies getan: ( hier gefunden )

 "Automatically change the statusline color depending on mode function! ChangeStatuslineColor() if (mode() =~# '\v(n|no)') exe 'hi! StatusLine ctermfg=008' elseif (mode() =~# '\v(v|V)' || g:currentmode[mode()] ==# 'V·Block' || get(g:currentmode, mode(), '') ==# 't') exe 'hi! StatusLine ctermfg=005' elseif (mode() ==# 'i') exe 'hi! StatusLine ctermfg=004' else exe 'hi! StatusLine ctermfg=006' endif  return '' endfunction 

... und dazu gehören:

set statusline+=% 

Es gibt jedoch ein Problem: Wenn Sie in den insertModus wechseln und dann drücken Esc, um zum normalModus zurückzukehren, ändert sich die Farbe nicht. Die Farbe wird nur zurückgesetzt, wenn Sie manuell in einen anderen Modus wechseln.

3

1 Antwort auf die Frage

0
Ingo Karkat

Das dynamische Ändern der StatusLineMarkierungsgruppe ist der falsche Ansatz. Dies überschreibt alle Voreinstellungen Ihres Farbschemas, und es scheint nicht zu funktionieren (vielleicht würde das Hinzufügen von a :redraw[status]helfen, aber dies würde eine noch hässlichere Implementierung bewirken).

Mit Vim können Sie in der Statuszeile eine benutzerdefinierte Hervorhebungsgruppe (sogar mehrere) mit dem %#HLname#Symbol angeben . Siehe :help 'statusline'für weitere Einzelheiten. Sie können den 'statusline'Wert entweder dynamisch ändern (dies ermöglicht auch unterschiedliche Farben für verschiedene Statuszeilen) oder den %!MyStatusLine()Ansatz verwenden, der den Wert selbst neu bewertet.

Danke für diese Antwort! Scheint in der Tat eine bessere Lösung zu sein. Ich werde meinen Kopf bekommen, danke rossijonas vor 6 Jahren 0