Як записати введення моєї клавіатури, щоб зробити статистику на ній?


12

Я хотів би дізнатися, які найпоширеніші зразки я використовую під час кодування. Тому я шукаю спосіб записати всі дані моєї клавіатури, коли я перебуваю в vim, бажано з мітками часу. Тоді я міг зробити деякий аналіз останніх використаних моделей / рухів, який час вживає певна дія, і з’ясувати речі для оптимізації.

Чи є ідіоматичний спосіб зробити це у Vim? Чи потрібно спробувати написати плагін для цього? Якими будуть наслідки для виконання подібних дій?

Дякую


1
Ви повинні почати дивитися на -wпрапор, коли ви починаєте vim. Ви можете записувати всі натискання клавіш за допомогою нього.
nobe4

4
Пов’язана публікація в блозі ( посилання ). Він показує, як записати свій вхід ( vim -w file.log), і надає сценарій haskell для розбору файлу на окремі команди, які ви можете потім проаналізувати. Немає часових позначок.
токоямі

Дякую @ Nobe4, це виглядає корисно, і я майже шукав. Мені все ще цікаво, чи час якось колекціонуюче. Можливо, не мітки часу, але час різниться між натисканнями клавіш. Це може допомогти з’ясувати швидкість того, як ідуть справи.
6D65

Насправді це було питанням для вас обох. Це просто не дозволило мені вказати згадки в одному коментарі.
6D65

Ось ідея, як захопити часову позначку: Використовуйте наступний скрипт і зателефонуйте vim таким чином: vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)якщо ви хочете і вихідного виводу) ( лише * nix ). Це має записати весь вхід із позначками часу, один байт на рядок, в log. Що я помітив, це те, що vim не виводить команди по черзі, а обробляє їх.
токоямі

Відповіді:


4

Vim дозволяє реєструвати весь вхід, коли параметр -wкомандного рядка передається з файлом:

-w {scriptout} Усі символи, які ви вводите, записуються у файл {scriptout}, поки не вийдете з Vim. Це корисно, якщо ви хочете створити файл сценарію для використання з "vim -s" або ": source!". Якщо файл {scriptout} існує, символи додаються.

Тепер, коли ми маємо доступ до вхідних даних, ми можемо перенаправляти його куди хочемо. Наприклад, наприклад (лише * nix системи ):

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

Де timestamper.pyтакий короткий сценарій пітона:

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

Сценарій можна замінити будь-якою іншою програмою, яка бере вклад, якщо ви хочете зробити щось більш складне.

ПРИМІТКА. Після короткого короткого тестування я виявив, що vim, здається, зберігає буфер входів, який він змиває в якийсь момент і на виході. Це робить часові позначки досить ненадійними.


Так. Цікаво, чи не міг би я підняти для цього питання неовім. Можливо, хлопці зацікавлені в наданні цієї функції. Або я міг би пірнути голову першим і спробувати замазати його сам, якщо це дозволено, хоча я, мабуть, не матиму часу.
6D65

@ 6D65 Я думаю, ви можете запропонувати проекту neovim функцію журналу налагодження введення, де кожен вхід від користувача відображається із позначкою часу. Я часто їх бачив, тимчасово виправляючи код, щоб спробувати і налагодити :terminalпроблеми, пов’язані з введенням, тому це має бути корисною функцією. Я не знайомий з API віддалених плагінів, які вони мають, але це також може мати певний спосіб отримати дані в режимі реального часу.
tokoyami

1
Або не робіть цього в Vim - використовуйте системний реєстратор клавіатури (запущений / зупинений з Vim) та проаналізуйте цей вихід.
VanLaser
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.