Jak nagrywać dane z klawiatury, aby wykonywać na niej statystyki?


12

Chciałbym dowiedzieć się, jakie są najczęstsze wzorce, których używam podczas kodowania. Więc szukam sposobu na nagranie wszystkich danych z klawiatury, gdy jestem w vimie, najlepiej ze znacznikami czasu. Następnie mógłbym przeprowadzić analizę ostatnio używanych wzorców / ruchów, o której godzinie podejmuje się działanie, i znaleźć rzeczy do optymalizacji.

Czy jest jakiś idiomatyczny sposób, aby to zrobić w Vimie? Czy mam do tego napisać wtyczkę? Jakie byłyby implikacje wydajnościowe zrobienia czegoś takiego?

Dzięki


1
Powinieneś zacząć patrzeć na -wflagę, kiedy zaczynasz vima. Za jego pomocą możesz nagrywać każde naciśnięcie klawisza.
— nobe4

4
Powiązany post na blogu ( link ). Pokazuje, jak zapisać dane wejściowe ( vim -w file.log) i udostępnia skrypt haskell do parsowania pliku w osobne polecenia, które można następnie przeanalizować. Brak znaczników czasu.
— tokoyami

Dziękuję @ Nobe4, wygląda to na przydatne i prawie szukałem. Nadal zastanawiam się, czy czas można w jakiś sposób zebrać. Może nie znaczniki czasu, ale różnice czasowe między naciśnięciami klawiszy. Może to pomóc w ustaleniu prędkości.
— 6D65

Właściwie to było pytanie dla was obu. To po prostu nie pozwoliło mi wyszczególnić wzmianek w jednym komentarzu.
— 6D65

Oto pomysł, jak uchwycić znacznik czasu: Użyj następującego skryptu i wywołaj vim w ten sposób: vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)jeśli chcesz również surowego wyjścia) ( tylko * nix ). To powinno zapisać wszystkie dane wejściowe ze znacznikami czasu, po jednym bajcie na wiersz log. Zauważyłem, że vim nie wypisuje poleceń jeden po drugim, ale je opróżnia.
— tokoyami

Odpowiedzi:


4

Vim zezwala na rejestrowanie wszystkich danych wejściowych po przekazaniu -wopcji wiersza poleceń z plikiem:

-w {scriptout} Wszystkie wpisane znaki są zapisywane w pliku {scriptout}, dopóki nie wyjdziesz z Vima. Jest to przydatne, jeśli chcesz utworzyć plik skryptu, który będzie używany z „vim -s” lub „: source!”. Jeśli plik {scriptout} istnieje, znaki są dodawane.

Teraz, gdy mamy dostęp do danych wejściowych, możemy przekierować je tam, gdzie chcemy. Na przykład następujący sposób ( tylko systemy * nix ):

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

Gdzie timestamper.pyjest następujący krótki skrypt Pythona:

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

Skrypt można zastąpić dowolnym innym programem, który pobiera dane, jeśli chcesz zrobić coś bardziej zaawansowanego.

UWAGA: Po kilku krótkich testach odkryłem, że vim wydaje bufor danych wejściowych, które opróżnia w pewnym momencie i przy wyjściu. To sprawia, że ​​znaczniki czasu są dość niewiarygodne.


Tak. Zastanawiam się, czy mógłbym podnieść w tym względzie kwestię neovimów. Może faceci są zainteresowani udostępnieniem tej funkcji. Albo mógłbym najpierw zanurkować w głowę i spróbować załatać ją sam, jeśli jest to dozwolone, ale prawdopodobnie nie będę miał czasu.
— 6D65

@ 6D65 Myślę, że możesz zasugerować projektowi neovim funkcję dziennika debugowania danych wejściowych, w której każde wejście użytkownika jest oznaczone znacznikiem czasu. Często widziałem, jak tymczasowo łatają kod, aby próbować debugować :terminalproblemy związane z danymi wejściowymi, więc powinna to być przydatna funkcja. Nie znam ich interfejsu API zdalnej wtyczki, ale może to również mieć jakiś sposób na uzyskanie danych wejściowych w czasie rzeczywistym.
— tokoyami

1
Lub nie rób tego w Vimie - użyj logera klawiatury systemowej (uruchomionego / zatrzymanego z Vima) i przeanalizuj to wyjście.
— VanLaser,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.