`echon` für` echomsg`

8

Die Befehle echonund echohlsind sehr nützlich für die Ausgabe von Textzeilen mit mehreren Hervorhebungsgruppen innerhalb derselben Zeile. Dies kann zum Beispiel verwendet werden, um nette Statusmeldungen für Plugins zu erstellen.

In einem Plugin, an dem ich arbeite, verwende ich genau diese Methode zur Ausgabe farbiger Statusmeldungen. Manchmal möchte ich diese Nachrichten jedoch auf message-historyähnliche Weise wie bei hinzufügen echomsg. Ist das irgendwie möglich? Ich glaube nicht, dass es dafür eine intrinsische Funktionalität gibt, aber vielleicht könnte man die Funktionalität mit vim script hinzufügen?

Karl Yngve Lervåg
quelle
1
Ich verstehe nicht, was der Unterschied ist? Lesen Sie die Hilfeseiten echonund echomsgarbeiten Sie gleich, außer dass dem Verlauf echomsgNachrichten hinzugefügt werden? Sie erwähnt : „Ich habe jetzt seit einiger Zeit versucht , “ , sollten Sie uns sagen , was genau Sie versucht haben, was Sie passieren zu erwarten, und was hat geschehen. Auf diese Weise können wir versuchen, das Problem zu beheben (falls vorhanden) oder ein Missverständnis zu erklären, das Sie möglicherweise haben.
Martin Tournoij
Es tut mir leid, dass ich unklar bin. Ich habe die Frage aktualisiert, um sie klarer zu gestalten, insbesondere, weil ich die echonFunktionalität mit dem Hinzufügen von Nachrichten zum Verlauf kombinieren möchte .
Karl Yngve Lervåg

Antworten:

9

Dies ist derzeit in Vim nicht möglich.

Intern :echomsgwird implementiert , wie :execute, mit der Ausnahme , dass , wenn aufgerufen , wie :echomsgdas Ergebnis der Ausführung mit dem Attribute der letzten angezeigt :echohlund gespeichert zu der Nachrichtenliste src/eval.c(Referenzfunktionen ex_echohlund ex_execute), das ist , wie Sie jede mögliche Farbe auf einer gespeicherten Nachricht erhalten.

Der tatsächliche Nachrichtenverlauf ist eine Sammlung (verknüpfte Liste) von Zeichenfolgen mit Attributen und wird in gespeichert und abgerufen src/message.c. Jede Zeichenfolge ist eine Nachricht (bestehend aus einer oder mehreren Zeilen), und das Attribut bestimmt unter anderem die Markierungsgruppe, die für die Anzeige verwendet werden soll. Aus diesem Grund muss jede Nachricht als Ganzes hervorgehoben werden (einzelne Hervorhebungsgruppe), und es darf sich nicht mehr als eine Nachricht in derselben Zeile befinden. src/message.c(Referenzstruktur msg_histund Funktion ex_messages)

Ich kann das nicht umgehen (ich dachte daran, eine Nachricht zu verwenden :echohlund :echonanzuzeigen, aber eine einfache Nachricht im Verlauf zu speichern. Leider scheint die Möglichkeit, dem Verlauf hinzuzufügen, ohne auch die Nachricht anzuzeigen, keinem Ex ausgesetzt zu sein -Befehle), ohne den Vim-Quellcode zu ändern.

John O'M.
quelle
1
Ich habe die Frage aktualisiert, damit die Absicht klarer wird. Ich denke, Sie könnten die Antwort nach meinem Update ebenfalls leicht aktualisieren (aber das liegt bei Ihnen). Ich glaube, Ihre Antwort reicht aus, um als "akzeptiert" markiert zu werden, obwohl ich immer noch auf eine gute Idee hoffe, um die Funktionalität mit vim script zu "hacken".
Karl Yngve Lervåg