Wie kann ich einen navigierbaren (bearbeitbaren?) Puffer mit den „Nachrichten“ von Vim erhalten?

Wie kann ich einen navigierbaren (bearbeitbaren?) Puffer mit den „Nachrichten“ von Vim erhalten?

Wenn ich also einen Fehler von einem Plugin erhalte, möchte ich diesen Fehler auf GitHub oder Ähnlichem melden können.

Leider kann es nicht mit der Maus ausgewählt werden. Und nachdem es angezeigt wurde und ich aufgefordert wurde, die Eingabetaste zu drücken, scheint es für immer verschwunden zu sein.

  1. Ich habe festgestellt, dass ich die Fehler verursachen kannwiedermit :messagesoder :3messagesoder ähnlich; sie erscheinen aber auf die gleiche Weise: nicht auswählbar, nutzlos.

  2. Ein weiterer Staplerfragteeine ähnliche Frage, die den nützlichen Befehl ergab :let @+=v:errmsg— aber das erfasst nur dieallerletzteZeile der Nachrichten; viele Fehler, die ich sehe, bestehen ausmehrereZeilen, die ich alle auswählen möchte.

Bitte helfen Sie mir entweder A. ein :messagesFenster in einen Puffer umzuwandeln, so dass ich die normale, ebenso visuelle Auswahl verwenden kann, um zu kopieren, was ich außerhalb von Vim melden möchte, oder zumindest B. etwas zu konstruieren, das ich in meinen einfügen kann und .vimrcdas kopiertalleder Zeilen des aktuellsten Fehlers in meine Zwischenablage.

Danke!(=

Antwort1

Die Antwort von Heptite ist eine gute Möglichkeit, dies mit integrierten Funktionen zu tun. Wenn Sie mit der Verwendung eines Plugins einverstanden sind, meinepuffernPlugin automatisiert den Prozess ein wenig. Sie können einfach Folgendes tun:

:Bufferize messages

Um einen Vorschaupuffer mit dem Inhalt der Ausgabe dieses Befehls zu erhalten.

Nebenbei bemerkt bin ich überrascht, dass die :messagesAusgabe nicht auswählbar ist. Ich vermute, Sie verwenden Vim mit einer GUI? Mit dem Terminal Vim können Sie den Inhalt auswählen und dann mit der mittleren Maustaste klicken und einfügen.

Antwort2

Versuche dies:

:put = execute('messages')

Erläuterung:

  • :put {register}setzt den Inhalt des Registers an die Cursorposition (wie pim Normalmodus)
  • execute('messages')ist eine Vimscript-Funktion, die einen Ex-Befehl ausführt und dessen Ausgabe erfasst
  • ={vimscript expression}ist das Ausdrucksregister, dessen Wert das Ergebnis des Vimscript-Ausdrucks ist

Das Obige erfasst also die Ausgabe des :messagesBefehls im Ausdrucksregister und platziert den Inhalt des Ausdrucksregisters an der Cursorposition.

Sehen :h quote=, :h :put,:h execute()

Antwort3

Versuche dies:

:redir > messages.txt
:messages
:redir END
:e messages.txt

Sie können die Ausgabe auf dem Display unterdrücken und gleichzeitig die ausgegebenen Nachrichten erfassen, indem Sie :messageszu ändern :silent messages.

verwandte Informationen