Wie zeichne ich meine Tastatureingaben auf, um Statistiken darüber zu erstellen?

12

Ich möchte herausfinden, welche Muster am häufigsten beim Codieren verwendet werden. Ich suche nach einer Möglichkeit, alle meine Tastatureingaben aufzuzeichnen, während ich in vim bin, vorzugsweise mit Zeitstempeln. Dann könnte ich die zuletzt verwendeten Muster / Bewegungen analysieren, wie lange eine Aktion dauert, und herausfinden, was zu optimieren ist.

Gibt es eine idiomatische Möglichkeit, dies in Vim zu tun? Soll ich versuchen, ein Plugin dafür zu schreiben? Was wären die Auswirkungen auf die Leistung, wenn Sie so etwas tun?

Vielen Dank

6D65
quelle
1
Sie sollten anfangen, auf die -wFlagge zu schauen, wenn Sie vim starten. Sie können damit alle Tastenanschläge aufzeichnen.
nobe4
4
Verwandter Blog-Beitrag ( Link ). Es zeigt Ihnen, wie Sie Ihre Eingabe ( vim -w file.log) aufzeichnen, und bietet ein Haskell-Skript, mit dem Sie die Datei in separate Befehle zerlegen können, die Sie dann analysieren können. Keine Zeitstempel.
Tokoyami
Danke @ Nobe4 das sieht nützlich aus und fast habe ich gesucht. Ich frage mich immer noch, ob die Zeit irgendwie sammelbar ist. Vielleicht keine Zeitstempel, aber die Zeit unterscheidet sich zwischen den Tastenanschlägen. Dies könnte helfen, herauszufinden, wie schnell die Dinge laufen.
6D65
Eigentlich war das eine Frage für euch beide. Es erlaubte mir einfach nicht, Erwähnungen in einem Kommentar anzugeben.
6D65
Hier ist eine Idee, wie der Zeitstempel erfasst wird: Verwenden Sie das folgende Skript und rufen Sie vim wie folgt auf : vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)wenn Sie auch die Rohausgabe wünschen) (nur * nix ). Dies sollte alle Ihre Eingaben mit Zeitstempeln, ein Byte pro Zeile, in schreiben log. Was mir aufgefallen ist, ist, dass vim die Befehle nicht einzeln ausgibt, sondern sie löscht.
Tokoyami

Antworten:

4

Vim ermöglicht die Protokollierung aller Eingaben, wenn die -wBefehlszeilenoption mit einer Datei übergeben wird:

-w {scriptout} Alle von Ihnen eingegebenen Zeichen werden in der Datei {scriptout} aufgezeichnet, bis Sie Vim beenden. Dies ist nützlich, wenn Sie eine Skriptdatei erstellen möchten, die mit "vim -s" oder ": source!" Verwendet werden soll. Wenn die Datei {scriptout} vorhanden ist, werden Zeichen angehängt.

Nachdem wir nun Zugriff auf die Eingabe haben, können wir sie an die gewünschte Stelle umleiten. Der folgende Weg zum Beispiel (nur * nix-Systeme ):

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

Wo timestamper.pyist das folgende kurze Python-Skript:

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

Das Skript kann durch jedes andere Programm ersetzt werden, das Eingaben vornimmt, wenn Sie etwas Anspruchsvolleres tun möchten.

HINWEIS: Nach einigen kurzen Tests stellte ich fest, dass vim einen Puffer der Eingaben zu behalten scheint, die irgendwann und beim Beenden gelöscht werden. Dies macht die Zeitstempel ziemlich unzuverlässig.

Tokoyami
quelle
Ja. Ich frage mich, ob ich dafür ein Neovim-Problem ansprechen könnte. Vielleicht sind Jungs daran interessiert, diese Funktion bereitzustellen. Oder ich könnte mit dem Kopf voran tauchen und versuchen, es selbst zu flicken, wenn es erlaubt ist, obwohl ich wahrscheinlich nicht die Zeit habe.
6D65
@ 6D65 Ich denke, Sie können dem neovim-Projekt eine Eingabe-Debug-Protokollfunktion vorschlagen, bei der jede Eingabe des Benutzers mit einem Zeitstempel angezeigt wird. Ich habe gesehen, dass sie häufig vorübergehend Code patchen, um :terminalProbleme im Zusammenhang mit der Eingabe zu beheben, sodass dies eine nützliche Funktion sein sollte. Ich bin nicht mit der Remote-Plugin-API vertraut, die sie haben, aber das könnte auch eine Möglichkeit haben, die Eingabe in Echtzeit zu erhalten.
Tokoyami
1
Oder tun Sie es nicht in Vim - verwenden Sie einen Systemtastatur-Logger (von Vim gestartet / gestoppt) und analysieren Sie diese Ausgabe.
VanLaser