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


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.