Vimgolf tüm tuş vuruşlarını nasıl kaydeder?


Yanıtlar:


10

Muhtemelen yerleşik parametreyi kullanırlar -w, bakınız :h -w:

-w {scriptout}  All the characters that you type are recorded in the file
        "scriptout", until you exit Vim.  This is useful if you want
        to create a script file to be used with "vim -s" or
        ":source!".  When the "scriptout" file already exists, new
        characters are appended.  See also |complex-repeat|.
        {scriptout} cannot start with a digit.
        {not in Vi}

@B Olarak Düzenle Katmanı, gerçek kodun -Wtemelde aynı olan parametreyi kullandığına dikkat çekti , -wancak tuş vuruşlarına eklemek yerine günlük dosyasının üzerine yazılır ( :h -W):

-W {scriptout}  Like -w, but do not append, overwrite an existing file.
        {not in Vi}

İyi tahminler! O oluyor -Wdeğil -w... (benim cevap bakınız) ama yine de
B Katmanı

@BLayer İyi oynadı Ben kodlarına bakmak için çok tembel oldu :-) Ben -Wtemelde aynı olan doc ile güncelleme edeceğiz .
statox

1
Evet. Yazmaya karşı sadece ekleyin.
B Katmanı

İyi (iyi) bir tahmin, iyi araştırılmış, gerçeklere dayalı bir cevap üzerinden kabul edilir mi? Ağır bir haksızlık yapıldı. :( ... LOL
B Katmanı

1
Bu asil bir jest. Alçakgönüllü oyunuzu kabul ediyorum, efendim ya da hanımefendi. Dilly dilly.
B Katmanı

14

Bu kadar basit olduğunu sanmıyorum ama Ruby koduna buradan bakabilirsiniz:

https://github.com/igrigorik/vimgolf/tree/master/lib/vimgolf

Biri için keylogging için bir sınıf görüyorum.

İşte başlatılması için kullanılan komut var vimiçinde 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 (hemen hemen) haklıydı -w outfile... -W outfileaslında, yazılan karakterlerin eklenmesi yerine gönderildiği dosyanın üzerine yazar. Ama dediğim gibi, "bu kadar basit" değil ... bu dosyalardan birinin içeriğini ve vimgolf aracı tarafından üretilenleri karşılaştırın. Bu gerçek bir vimgolf probleminden ...

-W kopyalandığında çıktı alın ve buraya yapıştırın:

GI0. ý`gvgý`ZZ

Basılı olmayan bazı karakterler "çeviride kayboldu".

-W Ekranda göründüğü şekliyle çıktı alın:

^VGI0. ^[<80>ý`gvg^A<80>ý`ZZ

Bu biraz çirkin.

vimgolf görüntülenen / yüklenen çıktı:

<C-V>GI0. <Esc>gvg<C-A>ZZ

Ahh, bu daha iyi.


Güncelleme: İşlere biraz daha yakından bakarak birkaç dakika geçirdim ve birkaç yeni bilgi aldım.

İlk olarak, yukarıda bahsettiğim keylogger sınıfı keylog.rb aslında bulmacanın önemli bir parçası ama aslında oldukça basit. Vim'in yayınladığı ve -Wgünlük dosyasına kaydedilen anahtar kodları ya bir bayt ya da üç bayttır (0x80'in ilk bayt değeri ile gösterilir) ve iki kümenin her biri için bir karma haritası vardır.

Tek baytlık sürüm, bayt değerini 0veya gibi anahtar kodunun dize ile eşleşir g. Üç baytlık sürüm benzer bir şekilde bir dizeyle (örneğin <Esc>veya <C-V>) eşleşir, ancak anahtar olarak iki ve üç baytın birleşik değerlerini kullanır. Farklı ele alınan bazı istisnalar / köşe vakaları vardır, ancak anahtar kodların büyük çoğunluğu bu iki haritada basit aramalarla çözülür.

Key logger kodunun ne kadar temel olduğunu görünce, anahtar kodu günlük dosyalarında (yukarıda yapıştırılan örnek gibi) gördüğüm şeyle ilgili bir sorun olduğunu söyleyebilirim. VimGolf kuralları için gerekli vimrc dosyasını kullanmış olmalıyım. Özellikle bu çizgi

set t_RV= 

doğru günlüğe kaydetme ile sonuçlanır. Yukarıdaki "ekranda görünür" örneği aslında şöyle görünür:

^VGI0. ^[gvg^AZZ

Şimdi bu "ham" dizeden VimGolf'un oluşturulmuş formuna kadar olan düz çizgiyi görebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.