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 Layer ชี้ให้เห็นว่ารหัสจริงใช้-Wพารามิเตอร์ซึ่งโดยทั่วไปเหมือนกับ-wแต่ไฟล์บันทึกจะถูกเขียนทับแทนการเพิ่มการกดแป้นต่อท้าย ( :h -W):

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

คาดหมายได้ดี! มัน-Wไม่ใช่-w(ดูคำตอบของฉัน) แต่ก็ยัง ...
B Layer

@BLayer เล่นได้ดีฉันขี้เกียจเกินกว่าที่จะดูรหัสของพวกเขา :-) ฉันจะอัปเดตด้วยเอกสาร-Wที่เหมือนกัน
statox

1
อ๋อ เพียงแค่ผนวกกับเขียน
B Layer

A (ดี) เดา outvotes และได้รับการยอมรับจากคำตอบที่ได้รับการวิจัยเป็นอย่างดี? ความอยุติธรรมที่ร้ายแรงได้เกิดขึ้นแล้ว :( ... LOL
B Layer

1
ท่าทางที่ดีงาม ฉันเจียมยอมรับการลงคะแนนของคุณคุณเป็นคนดีหรือท่านผู้หญิง Dilly dilly
B Layer

14

ฉันไม่คิดว่ามันค่อนข้างง่าย แต่คุณสามารถดูรหัส Ruby ด้วยตัวคุณเองที่นี่:

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

ฉันเห็นชั้นเรียนสำหรับการล็อคกุญแจสำหรับหนึ่งคน

นี่คือคำสั่งที่ใช้เรียกใช้vimใน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 (เกือบมาก) ถูกต้องเกี่ยวกับ-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 class keylog.rbที่ฉันพูดถึงข้างต้นนั้นเป็นปริศนาชิ้นสำคัญ แต่จริงๆแล้วมันค่อนข้างตรงไปตรงมา คีย์โค้ดที่ Vim ปล่อยออกมาและบันทึกไว้ใน-Wล็อกไฟล์เป็นหนึ่งไบต์หรือสามไบต์ (ระบุโดยค่าไบต์แรกของ 0x80) และมีการแฮชแม็พสำหรับแต่ละชุดสองชุด

รุ่นหนึ่งไบต์แผนที่ค่าไบต์เพื่อเป็นตัวแทนสตริงของ keycode เช่นหรือ0 gเวอร์ชันสามไบต์คล้ายกันกับสตริง (เช่น<Esc>หรือ<C-V>) แต่ใช้เป็นคีย์ค่าที่รวมกันของไบต์สองและสาม มีข้อยกเว้น / มุมกรณีบางอย่างที่จัดการแตกต่างกัน แต่รหัสส่วนใหญ่ได้รับการแก้ไขผ่านการค้นหาอย่างง่ายในแผนที่ทั้งสองนี้

การเห็นว่ารหัสตัวบันทึกคีย์แบบพื้นฐานคืออะไรฉันสามารถบอกได้ว่ามีบางอย่างผิดปกติกับสิ่งที่ฉันเห็นในไฟล์บันทึกรหัส (เช่นตัวอย่างที่วางไว้ด้านบน) ปรากฎว่าฉันควรจะใช้ไฟล์ vimrc ที่จำเป็นโดยกฎ VimGolf โดยเฉพาะในสายนี้

set t_RV= 

ผลลัพธ์ในการบันทึกที่ถูกต้อง ตัวอย่าง "ปรากฏบนหน้าจอ" ด้านบนจะมีลักษณะเช่นนี้:

^VGI0. ^[gvg^AZZ

ตอนนี้เราสามารถเห็นเส้นตรงจากสตริง "raw" นี้ไปยังรูปแบบการแสดงผลของ VimGolf

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.