Von Zeit zu Zeit mache ich gerne eine Runde Vimgolf . Es kann aufschlussreich sein.
Wie können sie alle Tastenanschläge aufzeichnen? Das muss ein vim-Feature sein. Jeder eine Idee, wie das geht. Unter bestimmten Umständen kann es nützlich sein, alles aufzuzeichnen.
key-bindings
user-input
Mike
quelle
quelle
Antworten:
Sie verwenden wahrscheinlich den eingebauten Parameter
-w
, siehe:h -w
:Bearbeiten Wie @B Layer hervorhob, verwendet der eigentliche Code den
-W
Parameter, der im Grunde der gleiche ist wie der,-w
aber die Protokolldatei wird überschrieben, anstatt die Tastenanschläge daran anzuhängen (:h -W
):quelle
-W
nicht-w
(siehe meine Antwort), aber immer noch ...-W
das im Grunde das gleiche ist.Ich denke nicht, dass es so einfach ist, aber Sie können den Ruby-Code hier selbst ansehen:
https://github.com/igrigorik/vimgolf/tree/master/lib/vimgolf
Zum einen sehe ich eine Klasse für Keylogging.
Hier ist der Befehl, der zum Starten
vim
in lib / vimgolf / cli.rb verwendet wird :@statox hatte (fast) recht mit
-w outfile
...-W outfile
eigentlich, was die Datei überschreibt, an die die eingegebenen Zeichen gesendet werden, anstatt sie anzuhängen. Aber wie gesagt, nicht "ganz so einfach" ... vergleichen Sie den Inhalt einer dieser Dateien und was vom vimgolf-Tool generiert wird. Dies ist von einem tatsächlichen Vimgolf-Problem ...-W
Ausgabe beim Kopieren und Einfügen hier:Mehrere nicht druckbare Zeichen gingen "in der Übersetzung verloren".
-W
Ausgabe so, wie sie auf dem Bildschirm angezeigt wird:Das ist irgendwie hässlich.
vimgolf angezeigte / hochgeladene Ausgabe:
Ahh, das ist besser.
Update: Ich habe ein paar Minuten damit verbracht, mir die Dinge etwas genauer anzusehen und ein paar neue Informationen zu haben.
Erstens ist die oben erwähnte Keylogger-Klasse keylog.rb zwar ein wichtiger Teil des Puzzles, aber eigentlich ziemlich einfach. Die von Vim ausgegebenen und in der
-W
Protokolldatei gespeicherten Schlüsselcodes sind entweder ein Byte oder drei Bytes (angezeigt durch einen ersten Bytewert von 0x80), und für jeden der beiden Sätze gibt es eine Hash-Zuordnung.Die Ein-Byte-Version ordnet den Byte-Wert einer Zeichenfolgendarstellung des Schlüsselcodes wie
0
oder zug
. Die Drei-Byte-Version wird in ähnlicher Weise einer Zeichenfolge (z. B.<Esc>
oder<C-V>
) zugeordnet, verwendet jedoch als Schlüssel die kombinierten Werte der Bytes zwei und drei. Es gibt einige Ausnahmen / Eckfälle, die unterschiedlich behandelt werden, aber die überwiegende Mehrheit der Schlüsselcodes wird durch einfache Suchvorgänge in diesen beiden Karten gelöst.Als ich sah, wie grundlegend der Schlüsselprotokollcode war, konnte ich feststellen, dass etwas mit dem, was ich in den Schlüsselcode-Protokolldateien sah, nicht stimmte (wie im oben eingefügten Beispiel). Es stellt sich heraus, dass ich die nach den VimGolf-Regeln erforderliche vimrc-Datei hätte verwenden sollen. Insbesondere diese Linie
führt zur korrekten Protokollierung. Das obige Beispiel "erscheint auf dem Bildschirm" würde tatsächlich so aussehen:
Jetzt kann man die gerade Linie von dieser "rohen" Zeichenfolge zu VimGolfs gerenderter Form sehen.
quelle