उस पर आँकड़े करने के लिए मेरा कीबोर्ड इनपुट कैसे रिकॉर्ड करें?


12

मैं यह पता लगाना चाहूंगा कि कोडिंग के दौरान मैं सबसे सामान्य पैटर्न क्या हूं। इसलिए मैं अपने सभी कीबोर्ड इनपुट को रिकॉर्ड करने का एक तरीका ढूंढ रहा हूं, जबकि मैं विम में हूं, अधिमानतः टाइमस्टैम्प के साथ। तब मैं सबसे हाल ही में उपयोग किए गए पैटर्न / गतियों पर कुछ विश्लेषण कर सकता था कि कार्रवाई में क्या समय लगता है, और अनुकूलन के लिए चीजों का पता लगाएं।

क्या विम में ऐसा करने का एक मुहावरेदार तरीका है? क्या मैं इसके लिए एक प्लगइन लिखने की कोशिश करूंगा? ऐसा कुछ करने का प्रदर्शन निहितार्थ क्या होगा?

धन्यवाद


1
-wजब आप विम शुरू करते हैं तो आपको ध्वज को देखना शुरू करना चाहिए । आप इसके साथ हर कीस्ट्रोक्स रिकॉर्ड कर सकते हैं।
nobe4

4
संबंधित ब्लॉग पोस्ट ( लिंक )। यह आपको दिखाता है कि आपके इनपुट को कैसे रिकॉर्ड किया जाए ( vim -w file.log) और फाइल को अलग-अलग कमांड में पार्स करने के लिए एक हैस्केल स्क्रिप्ट प्रदान करता है जिसका आप विश्लेषण कर सकते हैं। हालांकि कोई टाइमस्टैम्प नहीं।
टोकेयामी

धन्यवाद @ Nobe4 यह उपयोगी लगता है और लगभग मैं देख रहा था। मुझे अभी भी आश्चर्य है कि क्या समय किसी तरह संग्रहणीय है। शायद टाइमस्टैम्प नहीं, लेकिन समय कीस्ट्रोक्स के बीच भिन्न होता है। इससे चीजों की गति का पता लगाने में मदद मिल सकती है।
6D65

दरअसल वह आप दोनों के लिए एक सवाल था। इसने मुझे केवल एक टिप्पणी में उल्लेख निर्दिष्ट करने की अनुमति नहीं दी।
6D65

यहां एक विचार है कि टाइमस्टैम्प पर कब्जा कैसे करें: निम्न स्क्रिप्ट का उपयोग करें और इस तरह से विम को कॉल करें: vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)यदि आप कच्चा आउटपुट चाहते हैं, तो) ( * केवल निक्स )। यह आपके सभी इनपुट को टाइमस्टैम्प, एक बाइट प्रति पंक्ति, के साथ लिखना चाहिए log। मैंने देखा है कि विम आदेशों को एक-एक करके आउटपुट नहीं करता है, लेकिन उन्हें फ्लश करता है।
टोकियोमी

जवाबों:


4

जब -wकोई फ़ाइल के साथ कमांड लाइन विकल्प पास होता है , तो Vim सभी इनपुट को लॉग करने देता है :

-w {स्क्रिप्टआउट} आपके द्वारा टाइप किए गए सभी अक्षर फ़ाइल में दर्ज होते हैं {स्क्रिप्टआउट}, जब तक आप विम से बाहर नहीं निकलते। यदि आप "vim -s" या "स्रोत:" के साथ उपयोग की जाने वाली स्क्रिप्ट फ़ाइल बनाना चाहते हैं तो यह उपयोगी है। यदि {scriptout} फ़ाइल मौजूद है, तो वर्ण जोड़े जाते हैं।

अब जब हमारे पास इनपुट की पहुंच है तो हम इसे जहां चाहें वहां रीडायरेक्ट कर सकते हैं। उदाहरण के लिए निम्नलिखित तरीका ( * केवल निक्स सिस्टम ):

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

timestamper.pyनिम्नलिखित लघु अजगर लिपि कहां है:

#!/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))

यदि आप कुछ और अधिक परिष्कृत करना चाहते हैं तो स्क्रिप्ट को किसी अन्य प्रोग्राम से बदला जा सकता है जो इनपुट लेता है।

नोट: कुछ छोटे परीक्षण के बाद मुझे पता चला कि विम कुछ बिंदुओं पर और बाहर निकलने पर इनपुट की एक बफर रखता है। यह टाइमस्टैम्प को काफी अविश्वसनीय बनाता है।


हाँ। मुझे आश्चर्य है कि अगर मैं इसके लिए एक नवसिखुआ मुद्दा उठा सकता हूं। शायद लोग इस सुविधा को प्रदान करने में रुचि रखते हैं। या मैं पहले सिर डुबो सकता था और अगर अनुमति दी तो खुद को पैच करने की कोशिश कर सकता हूं, हालांकि मेरे पास शायद समय नहीं होगा।
डी 65

@ 6D65 मुझे लगता है कि आप नवविवाह परियोजना को एक इनपुट डिबग लॉग सुविधा का सुझाव दे सकते हैं जहां उपयोगकर्ता का हर इनपुट टाइमस्टैम्प के साथ दिखाया गया है। मैंने उन्हें :terminalइनपुट से संबंधित मुद्दों को आज़माने और डिबग करने के लिए अक्सर अस्थायी रूप से पैचिंग कोड देखा है, इसलिए यह एक उपयोगी विशेषता होनी चाहिए। मैं दूरस्थ प्लगइन एपीआई से परिचित नहीं हूँ, लेकिन उनके पास वास्तविक समय में इनपुट प्राप्त करने का कोई तरीका भी हो सकता है।
तोक्योमी

1
या विम में ऐसा न करें - एक सिस्टम कीबोर्ड लॉगर का उपयोग करें (विम से शुरू / बंद कर दिया गया) और उस आउटपुट को पार्स करें।
VanLaser
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.