ฉันจะบันทึกการป้อนข้อมูลด้วยแป้นพิมพ์เพื่อทำสถิติได้อย่างไร


12

ฉันต้องการค้นหารูปแบบที่พบบ่อยที่สุดที่ฉันใช้ระหว่างการเข้ารหัส ดังนั้นฉันกำลังมองหาวิธีการบันทึกแป้นพิมพ์ทั้งหมดของฉันในขณะที่ฉันเป็นกลุ่มโดยเฉพาะอย่างยิ่งกับการประทับเวลา จากนั้นฉันสามารถทำการวิเคราะห์เกี่ยวกับรูปแบบ / การเคลื่อนไหวล่าสุดที่ใช้ในการดำเนินการเวลาและค้นหาสิ่งต่าง ๆ เพื่อปรับให้เหมาะสม

มีวิธีการทำสิ่งนี้ใน Vim หรือไม่? ฉันจะลองและเขียนปลั๊กอินสำหรับสิ่งนี้หรือไม่? อะไรคือความหมายของประสิทธิภาพในการทำอะไรแบบนี้

ขอบคุณ


1
คุณควรเริ่มมอง-wธงเมื่อคุณเริ่มต้นเป็นกลุ่ม คุณสามารถบันทึกการกดแป้นทุกครั้งด้วย
nobe4

4
บล็อกโพสต์ที่เกี่ยวข้อง ( ลิงค์ ) มันแสดงให้คุณเห็นวิธีการบันทึกการป้อนข้อมูลของคุณ ( vim -w file.log) และให้สคริปต์ haskell เพื่อแยกไฟล์ออกเป็นคำสั่งแยกต่างหากซึ่งคุณสามารถวิเคราะห์ ไม่มีการประทับเวลาแม้ว่า
tokoyami

ขอบคุณ @ Nobe4 นี่ดูมีประโยชน์และเกือบฉันกำลังมองหา ฉันยังสงสัยว่าเวลานั้นเป็นของสะสมหรือไม่ อาจไม่ใช่การประทับเวลา แต่เวลาจะแตกต่างกันระหว่างการกดแป้น สิ่งนี้จะช่วยในการค้นหาความเร็วของสิ่งต่าง ๆ ที่เกิดขึ้น
6D65

จริงๆแล้วนั่นเป็นคำถามสำหรับคุณทั้งคู่ ไม่อนุญาตให้ฉันระบุการกล่าวถึงในความคิดเห็นเดียว
6D65

นี่เป็นแนวคิดเกี่ยวกับวิธีการบันทึกเวลา: ใช้สคริปต์ต่อไปนี้และโทรเป็นกลุ่มเช่นนี้: vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)ถ้าคุณต้องการเอาต์พุตดิบด้วย) ( * ระวังเท่านั้น ) logนี้ควรจะเขียนการป้อนข้อมูลทั้งหมดของคุณด้วยการประทับเวลาหนึ่งไบต์ต่อแถวใน สิ่งที่ฉันสังเกตได้คือเสียงเรียกเข้านั้นไม่ส่งออกคำสั่งทีละคำ แต่จะล้างออก
tokoyami

คำตอบ:


4

Vim อนุญาตให้ทำการบันทึกอินพุตทั้งหมดเมื่อ-wส่งผ่านตัวเลือกบรรทัดคำสั่งพร้อมไฟล์:

-w {scriptout} อักขระทั้งหมดที่คุณพิมพ์จะถูกบันทึกในไฟล์ {scriptout} จนกว่าคุณจะออกจากกลุ่ม สิ่งนี้มีประโยชน์หากคุณต้องการสร้างไฟล์สคริปต์ที่จะใช้กับ "vim -s" หรือ ": source!" หากไฟล์ {scriptout} มีอยู่อักขระจะถูกต่อท้าย

ตอนนี้เราสามารถเข้าถึงอินพุตเราสามารถเปลี่ยนเส้นทางไปยังที่ที่เราต้องการ ตัวอย่างวิธีดังต่อไปนี้ ( ระบบ * nix เท่านั้น ):

vim -w >(./timestamper.py > log)
vim -w >(tee raw-log | ./timestamper.py > log) # If we want the raw log, too

timestamper.pyสคริปต์ python สั้น ๆ ต่อไปนี้อยู่ที่ไหน:

#!/usr/bin/env python

import sys
import datetime

while True:
    if (sys.stdin.closed):
        sys.stdout.write("Input closed\n")
        break

    a = sys.stdin.read(1)
    if (not a):
        break
    sys.stdout.write("[{}]: {}\n".format(datetime.datetime.now(), a))

สคริปต์สามารถถูกแทนที่ด้วยโปรแกรมอื่นใดที่รับอินพุตถ้าคุณต้องการทำอะไรที่ซับซ้อนกว่านี้

หมายเหตุ: หลังจากการทดสอบสั้น ๆ ฉันพบว่ากลุ่มที่ดูเหมือนว่าจะเก็บบัฟเฟอร์ของอินพุตที่มันวูบวาบในบางจุดและเมื่อออก สิ่งนี้ทำให้การประทับเวลาไม่น่าเชื่อถืออย่างเป็นธรรม


ใช่. ฉันสงสัยว่าฉันสามารถยกประเด็น neovim สำหรับเรื่องนี้ บางทีพวกเขาสนใจที่จะนำเสนอฟีเจอร์นี้ หรือฉันสามารถดำน้ำหัวก่อนและพยายามปะด้วยตัวเองถ้าได้รับอนุญาตแม้ว่าฉันอาจจะไม่มีเวลา
6D65

@ 6D65 ฉันคิดว่าคุณสามารถแนะนำ neovim project ให้กับคุณลักษณะการบันทึกดีบักอินพุตที่ทุกอินพุตจากผู้ใช้ถูกแสดงด้วยการประทับเวลา ฉันเคยเห็นพวกเขามักจะแก้ไขรหัสชั่วคราวเพื่อลองและแก้ไข:terminalปัญหาที่เกี่ยวข้องกับอินพุตดังนั้นจึงควรเป็นคุณสมบัติที่มีประโยชน์ ฉันไม่คุ้นเคยกับ API ปลั๊กอินระยะไกลที่มี แต่อาจมีวิธีรับอินพุทแบบเรียลไทม์
tokoyami

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