Comment enregistrer mon entrée clavier pour faire des statistiques dessus?

12

Je voudrais savoir quels sont les modèles les plus courants que j'utilise lors du codage. Je cherche donc un moyen d'enregistrer toutes mes entrées au clavier pendant que je suis dans Vim, de préférence avec des horodatages. Ensuite, je pourrais faire une analyse des modèles / mouvements utilisés les plus récents, du temps nécessaire à une action et trouver des choses à optimiser.

Existe-t-il un moyen idiomatique de le faire à Vim? Dois-je essayer d'écrire un plugin pour cela? Quelles seraient les implications de performance de faire quelque chose comme ça?

Merci

6D65
la source
1
Vous devriez commencer à regarder le -wdrapeau lorsque vous démarrez vim. Vous pouvez enregistrer toutes les frappes avec.
nobe4
4
Article de blog connexe ( lien ). Il vous montre comment enregistrer votre entrée ( vim -w file.log) et fournit un script haskell pour analyser le fichier en commandes distinctes que vous pouvez ensuite analyser. Pas d'horodatage cependant.
tokoyami du
Merci @ Nobe4 cela a l'air utile et presque je cherchais. Je me demande toujours si le temps est en quelque sorte à collectionner. Peut-être pas d'horodatages, mais le temps diffère entre les frappes. Cela pourrait aider à découvrir la vitesse à laquelle les choses se passent.
6D65
En fait, c'était une question pour vous deux. Cela ne m'a tout simplement pas permis de préciser les mentions dans un commentaire.
6D65
Voici une idée pour capturer l'horodatage: Utilisez le script suivant et appelez vim comme ceci: vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)si vous voulez aussi la sortie brute) ( * nix uniquement ). Cela devrait écrire toutes vos entrées avec des horodatages, un octet par ligne, en log. Ce que j'ai remarqué, c'est que vim ne produit pas les commandes une par une mais les vide.
tokoyami du

Réponses:

4

Vim permet de -wconsigner toutes les entrées lorsque l' option de ligne de commande est passée avec un fichier:

-w {scriptout} Tous les caractères que vous saisissez sont enregistrés dans le fichier {scriptout}, jusqu'à ce que vous quittiez Vim. Ceci est utile si vous souhaitez créer un fichier de script à utiliser avec "vim -s" ou ": source!". Si le fichier {scriptout} existe, des caractères sont ajoutés.

Maintenant que nous avons accès à l'entrée, nous pouvons la rediriger où nous voulons. Par exemple, la manière suivante ( systèmes * nix uniquement ):

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

Où se timestamper.pytrouve le court script python suivant:

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

Le script peut être remplacé par n'importe quel autre programme qui prend une entrée si vous voulez faire quelque chose de plus sophistiqué.

REMARQUE: Après quelques tests courts, j'ai découvert que vim semble garder un tampon des entrées qu'il vide à un moment donné et à la sortie. Cela rend les horodatages assez peu fiables.

Tokoyami
la source
Ouais. Je me demande si je pourrais soulever un problème de neovim pour cela. Peut-être que les gars sont intéressés à fournir cette fonctionnalité. Ou je pourrais plonger la tête la première et essayer de le réparer moi-même si cela est autorisé, même si je n'aurai probablement pas le temps.
6D65
@ 6D65 Je pense que vous pouvez suggérer au projet neovim une fonction de journal de débogage d'entrée où chaque entrée de l'utilisateur est affichée avec un horodatage. Je les ai souvent vu patcher temporairement du code pour essayer de déboguer les :terminalproblèmes liés à l'entrée, donc cela devrait être une fonctionnalité utile. Je ne suis pas familier avec l'API de plugin distant qu'ils ont, mais cela pourrait également avoir un moyen d'obtenir l'entrée en temps réel.
tokoyami
1
Ou ne le faites pas dans Vim - utilisez un enregistreur de clavier système (démarré / arrêté depuis Vim) et analysez cette sortie.
VanLaser