Как записать мой ввод с клавиатуры, чтобы сделать статистику по нему?

12

Я хотел бы узнать, какие наиболее распространенные шаблоны я использую во время кодирования. Так что я ищу способ записать все мои вводы с клавиатуры, пока я в VIM, желательно с временными метками. Затем я мог бы проанализировать самые последние использованные шаблоны / движения, сколько времени занимает действие, и выяснить, что нужно оптимизировать.

Есть ли идиоматический способ сделать это в Vim? Должен ли я написать плагин для этого? Каковы будут последствия для производительности при выполнении чего-то подобного?

Спасибо

6D65
источник
1
Вы должны начать смотреть на -wфлаг, когда вы начинаете vim. Вы можете записывать каждое нажатие клавиши с ним.
nobe4
4
Связанный пост в блоге ( ссылка ). Он показывает вам, как записать ваш input ( 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следующий короткий скрипт на python:

#!/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, похоже, сохраняет буфер входных данных, которые он сбрасывает в некоторой точке и при выходе. Это делает временные метки довольно ненадежными.

tokoyami
источник
Да. Интересно, могу ли я поднять неовим вопрос для этого. Возможно, ребята заинтересованы в предоставлении этой функции. Или я мог бы нырнуть головой и попытаться исправить это сам, если позволил, хотя у меня вероятно не будет времени.
6D65
@ 6D65 Я думаю, вы можете предложить проекту neovim функцию журнала отладки ввода, где каждый ввод от пользователя отображается с отметкой времени. Я часто видел, как они временно исправляли код, чтобы попытаться отладить :terminalпроблемы, связанные с вводом, так что это должно быть полезной функцией. Я не знаком с API удаленного плагина, который у них есть, но у него также может быть какой-то способ получить информацию в реальном времени.
Токоями
1
Или не делайте этого в Vim - используйте системный регистратор клавиатуры (запускается / останавливается из Vim) и анализируйте этот вывод.
VanLaser