Saya tidak berpikir itu sesederhana itu tetapi Anda dapat melihat sendiri kode Ruby di sini:
https://github.com/igrigorik/vimgolf/tree/master/lib/vimgolf
Saya melihat kelas untuk keylogging, untuk satu.
Inilah perintah yang digunakan untuk meluncurkan vim
di lib / vimgolf / cli.rb :
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 (hampir) benar tentang -w outfile
... -W outfile
, sebenarnya, yang menimpa file yang diketik karakter yang dikirim daripada menambahkannya. Tapi seperti yang saya katakan, tidak "sesederhana itu" ... membandingkan konten dari salah satu file dan apa yang dihasilkan oleh alat vimgolf. Ini dari masalah vimgolf yang sebenarnya ...
-W
output ketika disalin lalu ditempel di sini:
GI0. ý`gvgý`ZZ
Beberapa karakter non-cetak "hilang dalam terjemahan".
-W
output seperti yang muncul di layar:
^VGI0. ^[<80>ý`gvg^A<80>ý`ZZ
Yah, itu agak jelek.
vimgolf ditampilkan / diunggah keluaran:
<C-V>GI0. <Esc>gvg<C-A>ZZ
Ahh, itu lebih baik.
Pembaruan: Saya menghabiskan beberapa menit mencari sesuatu yang lebih dekat dan memiliki beberapa informasi baru.
Pertama, keylogger kelas keylog.rb yang saya sebutkan di atas memang merupakan bagian utama dari teka-teki tetapi sebenarnya cukup mudah. Kode kunci yang dipancarkan Vim dan yang disimpan dalam -W
file log adalah satu byte atau tiga byte (ditunjukkan oleh nilai byte pertama 0x80) dan ada peta hash untuk masing-masing dari dua set.
Versi satu-byte memetakan nilai byte ke representasi string dari kode kunci seperti 0
atau g
. Versi tiga byte sama memetakan string (misalnya <Esc>
atau <C-V>
) tetapi menggunakan sebagai kunci nilai gabungan byte dua dan tiga. Ada beberapa pengecualian / kasus sudut yang ditangani secara berbeda tetapi sebagian besar kode kunci diselesaikan melalui pencarian sederhana di kedua peta ini.
Melihat betapa mendasarnya kode logger kunci, saya dapat mengatakan ada sesuatu yang salah dengan apa yang saya lihat dalam file log kode kunci (seperti contoh yang ditempelkan di atas). Ternyata saya seharusnya menggunakan file vimrc yang diperlukan oleh aturan VimGolf. Khususnya baris ini
set t_RV=
menghasilkan logging yang benar. Contoh "muncul di layar" di atas sebenarnya akan terlihat seperti ini:
^VGI0. ^[gvg^AZZ
Sekarang orang dapat melihat garis lurus dari string "mentah" ini ke bentuk yang diberikan VimGolf.