2 Stimmen

Das Erkennen des Modus innerhalb einer Funktion, die von einem einfachen :map aufgerufen wird

Ist es möglich, zu einer Funktion zu :mapen, die den Modus erkennen kann, in dem sie aufgerufen wurde? Das ist, was ich habe:

func! s:ShowModeFunction()
    echomsg mode(1)
endfunc

noremap  ShowMode ShowModeFunction()

map \m ShowMode

Die Zuordnung \m ruft letztendlich die oberste Funktion auf, die eine Zeichenfolge ausgibt, die den Normalmodus, den Operator-Pending-Modus oder einen der Visual-Modi angibt.

Dies funktioniert jedoch nur mit in der mittleren Zuordnung; jeder Doppelpunkt-Befehl würde den endgültigen mode()-Aufruf nutzlos machen, da er dann immer "Normalmodus" zurückgeben würde. Leider erfordert strikt einen Ausdruck auf der rechten Seite, und da die Funktion nichts zurückgibt, wird der implizite Rückgabewert 0 verwendet, der den Cursor in die erste Spalte verschiebt.

4voto

Ingo Karkat Punkte 159961

Wenn die Funktion einfach nichts zurückgibt, handelt es sich um eine No-Op im Ausdrucksabbild:

func! s:ShowModeFunction()
    echomsg mode(1)
    return ''
endfunc

Wenn es weitere Einschränkungen in map-expr gibt, setzen Sie einfach eine Variable dort und führen Sie die eigentliche Arbeit (einschließlich der Auswertung der Variable) in einem "normalen" Mapping oder :call durch, das Sie an Ihr ShowMode-Mapping anhängen können (oder ein anderes Zwischenmapping, um die Anpassungsfähigkeit zu erhalten).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X