Como gravar a entrada do meu teclado para fazer estatísticas?

12

Gostaria de descobrir quais são os padrões mais comuns que estou usando durante a codificação. Então, estou procurando uma maneira de gravar todas as minhas entradas de teclado enquanto estiver no vim, de preferência com registros de data e hora. Depois, pude fazer uma análise dos padrões / movimentos usados ​​mais recentes, quanto tempo leva uma ação, e descobrir coisas para otimizar.

Existe uma maneira idiomática de fazer isso no Vim? Devo tentar escrever um plugin para isso? Quais seriam as implicações de desempenho de se fazer algo assim?

obrigado

6D65
fonte
1
Você deve começar a olhar para a -wbandeira ao iniciar o vim. Você pode gravar todas as teclas digitadas com ele.
nobe4
4
Postagem relacionada no blog ( link ). Ele mostra como gravar sua entrada ( vim -w file.log) e fornece um script haskell para analisar o arquivo em comandos separados que você pode analisar. Não há registros de data e hora.
tokoyami
Obrigado @ Nobe4 isso parece útil e quase eu estava procurando. Ainda me pergunto se o tempo é de alguma forma colecionável. Talvez não sejam carimbos de data e hora, mas o tempo varia entre as teclas digitadas. Isso pode ajudar a descobrir a velocidade de como as coisas vão.
6D65 03/09
Na verdade, isso foi uma pergunta para vocês dois. Apenas não me permitiu especificar as menções em um comentário.
6D65 03/09
Aqui está uma idéia de como capturar o registro de data e hora: Use o script a seguir e chame o vim assim: vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)se você quiser a saída bruta também) ( * apenas nix ). Isso deve gravar todas as suas entradas com registros de data e hora, um byte por linha, em log. O que eu notei é que o vim não gera os comandos um por um, mas os libera.
tokoyami

Respostas:

4

O Vim permite registrar todas as entradas quando a -wopção da linha de comandos é passada com um arquivo:

-w {scriptout} Todos os caracteres que você digita são gravados no arquivo {scriptout}, até você sair do Vim. Isso é útil se você deseja criar um arquivo de script para ser usado com "vim -s" ou ": source!". Se o arquivo {scriptout} existir, os caracteres serão anexados.

Agora que temos acesso à entrada, podemos redirecioná-la para onde queremos. A seguinte maneira, por exemplo ( apenas sistemas * nix ):

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

Onde timestamper.pyestá o seguinte script python curto:

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

O script pode ser substituído por qualquer outro programa que receba entrada, se você quiser fazer algo mais sofisticado.

NOTA: Após alguns testes, descobri que o vim parece manter um buffer das entradas que ele libera em algum momento e na saída. Isso torna os timestamps razoavelmente confiáveis.

tokoyami
fonte
Sim. Gostaria de saber se eu poderia levantar uma questão neovim para isso. Talvez os caras estejam interessados ​​em fornecer esse recurso. Ou eu poderia mergulhar de cabeça primeiro e tentar consertá-lo, se permitido, embora eu provavelmente não tenha tempo.
6D65 03/09/2015
@ 6D65 Acho que você pode sugerir ao projeto neovim um recurso de log de depuração de entrada em que todas as entradas do usuário são mostradas com um timestamp. Eu os vi frequentemente corrigindo temporariamente o código para tentar depurar :terminalproblemas relacionados à entrada, por isso deve ser um recurso útil. Não estou familiarizado com a API de plug-in remoto que eles têm, mas isso também pode ter alguma maneira de obter a entrada em tempo real.
tokoyami
1
Ou não faça isso no Vim - use um registrador de teclado do sistema (iniciado / interrompido no Vim) e analise essa saída.
VanLaser 4/15