Bei Verwendung von set showcmd
Vim werden Teilbefehle in der letzten Zeile des Bildschirms angezeigt. Im normalen Modus wird beispielsweise beim Eingeben des Befehls dt.
die letzte Zeile angezeigt , dt
und 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.
options
command-history
Gonçalo Ribeiro
quelle
quelle
dt
wird angezeigt, weil der aktuelle Operator aussteht. Sobald eine Bewegung vorliegt, steht kein Operator mehr aus. Angenommen, wir gingen weiter und taten esdt.gU(gu)daw
oder so. Ist das alles "ein vollständiger Befehl" oder sind es vier vollständige Befehle oder etwas anderes?dt.gU(
es zwei Befehle:dt.
undgU(
... Sie möchten also wirklich eine Art Befehlsverlauf anzeigen (Vim zeigt bereits die "vollständigen Befehle" an).src/normal.c
den Code - Anrufeclear_showcmd()
an mehreren Stellen (normal_cmd()
,do_pending_operator()
,end_visual_mode()
). Ich spiele mit dem Dumping in eine Dateishowcmd_buf
an 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.Antworten:
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_clear
vor dem Aktualisieren der Anzeige eingestellt wurde oder nicht . (Alternativ können Sie die if-Anweisung auskommentieren und nur die eine Originalzeilereturn
belassen. 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.Das Ergebnis sieht folgendermaßen aus:
Ein paar interessante Dinge zu beachten:
j
,k
,b
usw.x
Befehl wird tatsächlichdl
in der showmd_buf.:
Befehls oder Aufrufen des Einfügemodus (zumindest in meinem Setup))."
, aber meine Tastenfolge ist im VIM-Fenster für meinen langen, im Register angegebenen Ruck sichtbar.^[
im Showmd-Bereich angezeigtquelle
Abgesehen von der John- Lösung gibt es eine andere Möglichkeit, alle vim-Tastenanschläge anzuzeigen, die gedrückt wurden, indem
-w
Parameter 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
-w
Option 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.
quelle