Vim: Wie erkennt man den Modus, in dem sich der Benutzer befindet, für die Statuszeile?

Ich benötige eine einfache (oder komplexe) Methode, um herauszufinden, in welchem ​​Modus sich der Benutzer befindet. Ich muss wissen, ob sich der Benutzer in den Modi "Normal", "Einfügen", "Visuell", "Ersetzen", "Ändern" usw. befindet.

Mir ist bewusst, dassmode() Funktion, aber ich kann nicht herausfinden, wie es eine vollständige Zeichenfolge anstelle von nur einem Zeichen ausgegeben wird.

Mein Plan war es, eine Funktion zu erstellen, mit der sich die Hintergrund- und Vordergrundfarben der Statuszeile je nach Zeichenfolge dynamisch ändern lassenmode() kehrt zurück. Grundsätzlich eine Funktion mit ein paar ifs und elseifs, die es für mich tun würden. Es gibt jedoch einen Fehler bei diesem Ansatz, ich kann nicht wissen, welche Farbe das Design standardmäßig dafür hat.

Im Grunde brauche ich ein paar Tipps / Hilfe, um eine Funktion zu erstellen, die Folgendes bewirkt:

Weiß, in welchem ​​Modus sich der Benutzer befindet. Die übrigen Funktionen reagieren bei jeder Änderung anders.Setzt einige Variablen mitfg undbg Werte, die widerspiegeln, was das aktuelle Thema für sie festgelegt hat.Ändert den Vorder- und Hintergrund der Statuszeile in Abhängigkeit von diesen Werten.

Ich habe es versucht, aber es war eine sehr grobe Methode und es hat überhaupt nicht funktioniert. Es wurden nur einmal die Farben eingestellt und danach reagierte es nicht jedes Mal, wenn es sich änderte.

Danke für Ihre Hilfe! :)

BEARBEITEN:

Ich bin mir ziemlich sicher, dass das, was ich vorher versucht habe, nicht funktioniert hat:

function! StatuslineModeColor()
    let s:StatuslineMode=mode()
    if s:StatuslineMode == 'n'
        hi Statusline ctermbg=blue guibg=blue
    elseif s:StatuslineMode == 'i'
        hi Statusline ctermbg=red guibg=red
    endif
endfunc

Und in die Statuszeile habe ich folgendes eingetragen:

let &stl.='%{StatuslineModeColor()}'

EDIT 2:

Ich habe herausgefunden, dass ich im Grunde genommen einen Weg finden muss, um alle Farben zu erfassen, die das Thema zuvor verwendet hat. Das ist, wenn ich diese Lösung verwende:http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5

Diese Lösung ist jedoch in meinen Standards nicht ideal, da sie nicht sauber oder so sauber ist, wie es sein könnte, da sie viel Durcheinander ausmacht. : /

Antworten auf die Frage(1)

Ihre Antwort auf die Frage