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 :
vimcmd = GOLFVIM.shellsplit + %W{-Z -n --noplugin --nofork -i NONE +0
-u #{challenge.vimrc_path} -U NONE -W #{challenge.log_path} #{challenge.work_path}}
@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:
GI0. ý`gvgý`ZZ
Mehrere nicht druckbare Zeichen gingen "in der Übersetzung verloren".
-W
Ausgabe so, wie sie auf dem Bildschirm angezeigt wird:
^VGI0. ^[<80>ý`gvg^A<80>ý`ZZ
Das ist irgendwie hässlich.
vimgolf angezeigte / hochgeladene Ausgabe:
<C-V>GI0. <Esc>gvg<C-A>ZZ
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 zu g
. 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
set t_RV=
führt zur korrekten Protokollierung. Das obige Beispiel "erscheint auf dem Bildschirm" würde tatsächlich so aussehen:
^VGI0. ^[gvg^AZZ
Jetzt kann man die gerade Linie von dieser "rohen" Zeichenfolge zu VimGolfs gerenderter Form sehen.