Come registrare il mio input da tastiera per fare statistiche su di esso?


12

Vorrei scoprire quali sono i modelli più comuni che sto usando durante la codifica. Quindi sto cercando un modo per registrare tutti i miei input da tastiera mentre sono in vim, preferibilmente con timestamp. Quindi potrei fare qualche analisi sui più recenti schemi / movimenti usati a che ora fa un'azione e scoprire cose da ottimizzare.

C'è un modo idiomatico per farlo in Vim? Devo provare a scrivere un plugin per questo? Quali sarebbero le implicazioni prestazionali di fare qualcosa del genere?

Grazie


1
Dovresti iniziare a guardare la -wbandiera quando inizi vim. È possibile registrare ogni battitura con esso.
nobe4,

4
Post di blog correlati ( link ). Ti mostra come registrare il tuo input ( vim -w file.log) e fornisce uno script haskell per analizzare il file in comandi separati che puoi quindi analizzare. Nessun timestamp però.
Tokoyami,

Grazie @ Nobe4 questo sembra utile e quasi stavo cercando. Mi chiedo ancora se il tempo è in qualche modo da collezionare. Forse non i timestamp, ma il tempo differisce tra i tasti. Questo potrebbe aiutare a scoprire la velocità di come vanno le cose.
6D65

In realtà quella era una domanda per entrambi. Non mi ha permesso di specificare le menzioni in un commento.
6D65

Ecco un'idea su come catturare il timestamp: usa il seguente script e chiama vim in questo modo: vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)se vuoi anche l'output non elaborato) ( solo * nix ). Questo dovrebbe scrivere tutti i tuoi input con timestamp, un byte per riga, in log. Quello che ho notato è che vim non emette i comandi uno alla volta ma li scarica.
Tokoyami,

Risposte:


4

Vim consente di registrare tutti gli input quando l' -wopzione della riga di comando viene passata con un file:

-w {scriptout} Tutti i caratteri digitati vengono registrati nel file {scriptout}, fino all'uscita da Vim. Ciò è utile se si desidera creare un file di script da utilizzare con "vim -s" o ": source!". Se esiste il file {scriptout}, i caratteri vengono aggiunti.

Ora che abbiamo accesso all'input, possiamo reindirizzarlo dove vogliamo. Il seguente modo per esempio ( solo sistemi * nix ):

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

Dov'è timestamper.pyil seguente breve script 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))

Lo script può essere sostituito con qualsiasi altro programma che accetta input se si desidera fare qualcosa di più sofisticato.

NOTA: dopo alcuni brevi test ho scoperto che vim sembra mantenere un buffer degli input che scarica a un certo punto e all'uscita. Ciò rende i timestamp abbastanza inaffidabili.


Si. Mi chiedo se potrei sollevare un problema neovim per questo. Forse i ragazzi sono interessati a fornire questa funzione. Oppure potrei immergermi prima in testa e provare a rattoppare me stesso se permesso, anche se probabilmente non avrò il tempo.
6D65,

@ 6D65 Penso che puoi suggerire al progetto neovim una funzione di registro di debug di input in cui ogni input dell'utente viene mostrato con un timestamp. Li ho visti spesso correggere temporaneamente il codice per provare a eseguire il debug dei :terminalproblemi relativi all'input, quindi dovrebbe essere una funzione utile. Non ho familiarità con l'API del plugin remoto che hanno, ma potrebbe anche avere un modo per ottenere l'input in tempo reale.
Tokoyami,

1
Oppure non farlo in Vim: usa un logger per tastiera di sistema (avviato / arrestato da Vim) e analizza quell'output.
VanLaser,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.