Befehlsverlauf mit showmd anzeigen

11

Bei Verwendung von set showcmdVim werden Teilbefehle in der letzten Zeile des Bildschirms angezeigt. Im normalen Modus wird beispielsweise beim Eingeben des Befehls dt.die letzte Zeile angezeigt , dtund wenn Sie .den Befehl drücken, ist der Befehl abgeschlossen und daher wird nichts angezeigt.

Gibt es eine Möglichkeit, vollständige Befehle anzuzeigen? Zum Beispiel würde beim Tippen dt.gU(zuerst dt.angezeigt; und wenn mit der Eingabe des zweiten Befehls begonnen wird, wird der erste gelöscht, so dass am Ende nur gU(noch angezeigt wird.

Dies kann beispielsweise bei der Veranschaulichung von GIFs hilfreich sein. und um zu überprüfen, ob Sie das eingegeben haben, was Sie wollten, wenn Sie auf ein unerwartetes Ergebnis stoßen.

Gonçalo Ribeiro
quelle
1
Was ist ein vollständiger Befehl? Das dtwird angezeigt, weil der aktuelle Operator aussteht. Sobald eine Bewegung vorliegt, steht kein Operator mehr aus. Angenommen, wir gingen weiter und taten es dt.gU(gu)dawoder so. Ist das alles "ein vollständiger Befehl" oder sind es vier vollständige Befehle oder etwas anderes?
Davidlowryduda
@mixedmath für mich, das würde als 4 Befehle zählen. Der zweite Absatz der Antwort versucht zu disambiguieren, was ich meine.
Gonçalo Ribeiro
2
Aus Sicht von Vim gibt dt.gU(es zwei Befehle: dt. und gU(... Sie möchten also wirklich eine Art Befehlsverlauf anzeigen (Vim zeigt bereits die "vollständigen Befehle" an).
Martin Tournoij
@ Carpetsmoker, ja, das könnte das sein, was ich will. Vielen Dank, dass Sie den Titel der Frage bearbeitet haben.
Gonçalo Ribeiro
3
Ich habe im Vim-Quellcode nach dem normalen Verlauf gesucht . In src/normal.cden Code - Anrufe clear_showcmd()an mehreren Stellen ( normal_cmd(), do_pending_operator(), end_visual_mode()). Ich spiele mit dem Dumping in eine Datei showcmd_bufan diesen Stellen, was ziemlich gut aussah, aber ich bin mir ziemlich sicher, dass Sie nicht das bekommen können, was Sie wollen, ohne den Vim-Quellcode auf ähnliche Weise zu ändern und neu zu erstellen. Natürlich könnte es sich lohnen, Ihre Gifs zu erstellen.
John O'M.

Antworten:

9

Ich konnte in einem normalen Vim keine Möglichkeit finden, dies zu tun. Wenn Sie jedoch bereit sind, Vim zu patchen, kann Folgendes für Sie funktionieren.

Der sehr einfache Patch (angewendet auf Vim-7.4.052) deaktiviert die eigentliche Aktualisierung des Bildschirms, mit der der Verlauf am Ende eines normalen Befehls gelöscht wird. Dazu wird zurückgegeben, ob showcmd_is_clearvor dem Aktualisieren der Anzeige eingestellt wurde oder nicht . (Alternativ können Sie die if-Anweisung auskommentieren und nur die eine Originalzeile returnbelassen. Hinweis : Der folgende Patch wurde nicht sehr gut eingefügt. Möglicherweise müssen Sie ihn von Hand anwenden, obwohl es sich nur um einen kurzen Einzeiler handelt. Hinweis : Ich habe das tatsächliche nicht auskommentiert, display_showcmd()da es anscheinend im visuellen Modus verwendet wird, um die Anzeige der Anzahl ausgewählter Zeilen oder anderer möglicherweise anderer Dinge zu aktualisieren. Ich habe dies nicht ausführlich getestet.

--- src/normal.c    2015-02-14 00:21:23.286352257 -0500
+++ src/normal.c    2015-02-14 00:21:25.238352173 -0500
@@ -4029,6 +4029,7 @@
    /* Don't actually display something if there is nothing to clear. */
    if (showcmd_is_clear)
        return;
+   return;
     }

     display_showcmd()

Das Ergebnis sieht folgendermaßen aus:

Screencast mit dem Patch

Ein paar interessante Dinge zu beachten:

  • Dies zeigt auch einfache Bewegungen, wie j, k, busw.
  • Der xBefehl wird tatsächlich dlin der showmd_buf.
  • Befehle, die das Endergebnis ändern, verwischen den Schaufensterbereich (z. B. mithilfe des :Befehls oder Aufrufen des Einfügemodus (zumindest in meinem Setup)).
  • Das Aufnahmeprogramm hat die Aufzeichnung vieler Striche gestoppt, nachdem ich a eingegeben habe ", aber meine Tastenfolge ist im VIM-Fenster für meinen langen, im Register angegebenen Ruck sichtbar.
  • Wird in der Besetzung nicht gezeigt, aber das Schlagen escim normalen Modus wird ^[im Showmd-Bereich angezeigt
John O'M.
quelle
4

Abgesehen von der John- Lösung gibt es eine andere Möglichkeit, alle vim-Tastenanschläge anzuzeigen, die gedrückt wurden, indem -wParameter verwendet werden, die alle Zeichen aufzeichnen, die Sie in die Datei eingeben. Das Problem ist, dass vim nur dann Tastatureingaben schreibt, wenn Sie Vim beenden. So funktioniert VimGolf .

Um dies zu umgehen , hat Kana Natsuno diesen einzeiligen Patch entwickelt , der die Pufferung der -wOption deaktiviert , sodass Sie auf Echtzeitströme von Tastenanschlägen zugreifen können. Dann müssen Sie sie lesen (z. B. tail -f), analysieren oder versuchen, sie in der Statusleiste anzuzeigen ( :set statusline).

Schauen Sie sich einen benutzerdefinierten Build von Vim mit Drews Live-Stream-Keystrokes-Zweig von MacVim an, um den Echtzeit-Stream von Keystrokes abzurufen.

Quelle: Vimprint - ein Vim-Tastendruck-Parser im Drew Neil-Blog

Dies ist nützlich, wenn Sie die von Vim gedrückten Tastenanschläge in Video-Tutorials oder GIFs anzeigen möchten.

Kenorb
quelle