Dari waktu ke waktu saya suka terlibat dalam putaran vimgolf . Itu bisa mencerahkan.
Bagaimana mereka bisa merekam semua penekanan tombol? Itu harus menjadi fitur vim. Ada yang tahu bagaimana melakukan itu. Mungkin berguna untuk merekam segala sesuatu dalam keadaan tertentu.
key-bindings
user-input
mikrofon
sumber
sumber
Jawaban:
Mereka mungkin menggunakan parameter bawaan
-w
, lihat:h -w
:Sunting Seperti @B Layer menunjukkan kode aktual menggunakan
-W
parameter yang pada dasarnya sama dengan-w
tetapi file log ditimpa alih-alih menambahkan penekanan tombol untuk itu (:h -W
):sumber
-W
bukan-w
(lihat jawaban saya) tapi masih ...-W
yang pada dasarnya sama.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 :@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:Beberapa karakter non-cetak "hilang dalam terjemahan".
-W
output seperti yang muncul di layar:Yah, itu agak jelek.
vimgolf ditampilkan / diunggah keluaran:
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
ataug
. 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
menghasilkan logging yang benar. Contoh "muncul di layar" di atas sebenarnya akan terlihat seperti ini:
Sekarang orang dapat melihat garis lurus dari string "mentah" ini ke bentuk yang diberikan VimGolf.
sumber