¿Cómo grabar la entrada de mi teclado para hacer estadísticas?

12

Me gustaría saber cuáles son los patrones más comunes que estoy usando durante la codificación. Así que estoy buscando una manera de grabar toda mi entrada de teclado mientras estoy en vim, preferiblemente con marcas de tiempo. Entonces podría hacer un análisis sobre los patrones / movimientos utilizados más recientemente a qué hora toma una acción, y descubrir cosas para optimizar.

¿Hay alguna forma idiomática de hacer esto en Vim? ¿Debo intentar escribir un complemento para esto? ¿Cuáles serían las implicaciones de rendimiento de hacer algo como esto?

Gracias

6D65
fuente
1
Debería comenzar a mirar la -wbandera cuando inicie vim. Puede grabar todas las pulsaciones de teclas con él.
nobe4
44
Publicación de blog relacionada ( enlace ). Le muestra cómo registrar su entrada ( vim -w file.log) y proporciona un script haskell para analizar el archivo en comandos separados que luego puede analizar. Sin embargo, no hay marcas de tiempo.
tokoyami
Gracias @ Nobe4, esto parece útil y casi lo estaba buscando. Todavía me pregunto si el tiempo es de alguna manera coleccionable. Quizás no sean marcas de tiempo, pero el tiempo difiere entre las pulsaciones de teclas. Esto podría ayudar a descubrir la velocidad de cómo van las cosas.
6D65
En realidad esa fue una pregunta para los dos. Simplemente no me permitió especificar las menciones en un comentario.
6D65
Aquí hay una idea de cómo capturar la marca de tiempo: use el siguiente script y llame a vim de esta manera: vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)si también desea la salida sin formato) ( solo * nix ). Esto debería escribir toda su entrada con marcas de tiempo, un byte por fila, en log. Lo que he notado es que vim no genera los comandos uno por uno, sino que los vacía.
tokoyami

Respuestas:

4

Vim permite registrar todas las entradas cuando la -wopción de línea de comando se pasa con un archivo:

-w {scriptout} Todos los caracteres que escribe se registran en el archivo {scriptout}, hasta que salga de Vim. Esto es útil si desea crear un archivo de script para usar con "vim -s" o ": source!". Si el archivo {scriptout} existe, se agregan caracteres.

Ahora que tenemos acceso a la entrada, podemos redirigirla a donde queramos. La siguiente manera, por ejemplo ( solo sistemas * nix ):

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

¿Dónde timestamper.pyestá el siguiente script corto de 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))

El script se puede reemplazar con cualquier otro programa que tome datos si desea hacer algo más sofisticado.

NOTA: Después de algunas pruebas breves, descubrí que vim parece mantener un búfer de las entradas que descarga en algún momento y al salir. Esto hace que las marcas de tiempo sean poco confiables.

tokoyami
fuente
Si. Me pregunto si podría plantear un problema de neovim para esto. Tal vez los chicos estén interesados ​​en proporcionar esta función. O podría bucear primero y tratar de arreglarlo yo mismo si me lo permiten, aunque probablemente no tenga tiempo.
6D65
@ 6D65 Creo que puede sugerir al proyecto neovim una función de registro de depuración de entrada donde cada entrada del usuario se muestra con una marca de tiempo. Los he visto a menudo parchear temporalmente el código para tratar de depurar :terminalproblemas relacionados con la entrada, por lo que debería ser una característica útil. No estoy familiarizado con la API del complemento remoto que tienen, pero eso también podría tener alguna forma de obtener la entrada en tiempo real.
tokoyami
1
O no lo haga en Vim: use un registrador de teclado del sistema (iniciado / detenido desde Vim) y analice esa salida.
VanLaser