Vimgolf सभी कीस्ट्रोक्स को कैसे रिकॉर्ड करता है?


10

समय-समय पर मैं vimgolf के एक दौर में संलग्न होना पसंद करता हूं । यह ज्ञानवर्धक हो सकता है।

वे सभी कीस्ट्रोक्स रिकॉर्ड करने में कैसे सक्षम हैं? यह एक विम फीचर होना चाहिए। किसी को भी किसी भी विचार कैसे करना है। यह कुछ परिस्थितियों में सब कुछ रिकॉर्ड करने के लिए काम आ सकता है।


1
मैं बस पता चला हम एक बहुत समान सवाल है कि यहाँ
statox

जवाबों:


10

वे शायद अंतर्निहित पैरामीटर का उपयोग करते -wहैं, देखें :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 लेयर के रूप में संपादित करें वास्तविक कोड ने उस -Wपैरामीटर का उपयोग किया है जो मूल रूप से समान है -wलेकिन लॉग फ़ाइल को कीस्ट्रोक्स के साथ जोड़ने के बजाय इसे ओवरराइट किया गया है ( :h -W):

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

अच्छा अंदाजा! यह -Wनहीं है -w(मेरा उत्तर देखें) लेकिन फिर भी ...
बी लेयर

@ अच्छा खेला मैंने उनके कोड को देखने के लिए बहुत आलसी था :-) मैं डॉक्टर के साथ अपडेट करूंगा -Wजिसके लिए मूल रूप से समान है।
statox

1
हां। बस लिखो बनाम लिखो।
बी लेयर

ए (अच्छा) अनुमान लगाता है और एक अच्छी तरह से शोध, तथ्य-आधारित उत्तर पर स्वीकार किया जाता है? घोर अन्याय किया गया है। :( ... LOL
B लेयर

1
'एक नेक इशारा। मैं विनम्रतापूर्वक आपका वोट स्वीकार करता हूं, अच्छा सर या मैडम। बिलकुल सराबोर।
बी लेयर

14

मुझे नहीं लगता कि यह काफी सरल है, लेकिन आप रूबी कोड को खुद यहां देख सकते हैं:

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

मैं कीलिंग के लिए एक वर्ग देखता हूं, एक के लिए।

यहां वह कमांड दिया गया है जिसका उपयोग lib / vimgolf / cli.rbvim में लॉन्च करने के लिए किया जाता है :

 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 के बारे में (लगभग) सही था -w outfile... -W outfile, वास्तव में, जो उस फ़ाइल को अधिलेखित करता है जिस पर टाइप किए गए पात्रों को भेजने के बजाय भेजा जाता है। लेकिन जैसा कि मैंने कहा, "काफी सरल नहीं है" ... उन फ़ाइलों में से एक की सामग्री की तुलना करें और जो विमगुल्फ़ टूल द्वारा उत्पन्न होती है। यह एक वास्तविक vimgolf समस्या से है ...

-W आउटपुट जब कॉपी किया जाता है तो यहां चिपकाया जाता है:

GI0. ý`gvgý`ZZ

कई गैर-मुद्रण वर्णों को "अनुवाद में खो गया" मिला।

-W आउटपुट ऑन-स्क्रीन पर दिखाई देता है:

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

खैर, यह थोड़े बदसूरत है।

vimgolf प्रदर्शित / अपलोड किया गया आउटपुट:

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

आह, यह बेहतर है।


अपडेट: मैंने कुछ मिनट बिताए और चीजों को थोड़ा करीब से देखा और कुछ नई जानकारी हासिल की।

सबसे पहले, keylogger वर्ग keylog.rb जिसका मैं ऊपर उल्लेख करता हूं, वास्तव में पहेली का एक प्रमुख टुकड़ा है लेकिन यह वास्तव में काफी सीधा है। कीमकोड जो विम का उत्सर्जन करता है और जो -Wलॉग फ़ाइल में सहेजे जाते हैं, वे या तो एक बाइट या तीन बाइट्स (0x80 के पहले बाइट मान द्वारा दर्शाए गए) होते हैं और दोनों सेटों में से प्रत्येक के लिए एक हैश मैप होता है।

एक-बाइट संस्करण बाइट मान को कीकोड के एक स्ट्रिंग प्रतिनिधित्व जैसे कि 0या g। तीन-बाइट संस्करण इसी तरह से एक स्ट्रिंग (जैसे <Esc>या <C-V>) के लिए मैप करता है, लेकिन बाइट्स के संयुक्त मूल्यों के रूप में दो और तीन का उपयोग करता है। कुछ अपवाद / कोने-मामले हैं जिन्हें अलग-अलग तरीके से संभाला जाता है, लेकिन अधिकांश कुंजीकोड को इन दो मानचित्रों में सरल लुकअप के माध्यम से हल किया जाता है।

कुंजी लॉगर कोड कितना बुनियादी था यह देखकर कि मैं कुछ बता सकता हूं कि मैं कीकोड लॉग फाइलों में क्या देख रहा था (जैसे कि ऊपर उदाहरण में चिपकाया गया था)। यह पता चला है कि मुझे VimGolf नियमों द्वारा आवश्यक vimrc फ़ाइल का उपयोग करना चाहिए था। विशेष रूप से इस लाइन में

set t_RV= 

सही लॉगिंग में परिणाम। ऊपर "स्क्रीन पर दिखाई देता है" उदाहरण वास्तव में इस तरह दिखेगा:

^VGI0. ^[gvg^AZZ

अब कोई भी इस "कच्चे" तार से सीधी रेखा को विमगोल्फ के रेंडर रूप में देख सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.