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
-w
Flagge zu schauen, wenn Sie vim starten. Sie können damit alle Tastenanschläge aufzeichnen.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.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 schreibenlog
. Was mir aufgefallen ist, ist, dass vim die Befehle nicht einzeln ausgibt, sondern sie löscht.Antworten:
Vim ermöglicht die Protokollierung aller Eingaben, wenn die
-w
Befehlszeilenoption mit einer Datei übergeben wird: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 ):
Wo
timestamper.py
ist das folgende kurze Python-Skript: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.
quelle
:terminal
Probleme 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.