如何记录我的键盘输入以进行统计?


12

我想找出我在编码过程中最常用的模式是什么。因此,我正在寻找一种在vim中记录所有键盘输入的方法,最好使用时间戳记。然后,我可以对最近使用的模式/动作进行一些分析,以了解动作将花费什么时间,并找出要优化的内容。

在Vim中有惯用的方法吗?我可以尝试为此编写一个插件吗?这样做会对性能产生什么影响?

谢谢


1
-w启动vim时,应该开始查看该标志。您可以用它记录每次击键。
nobe4 2015年

4
相关博客文章(链接)。它显示了如何记录输入(vim -w file.log),并提供了一个haskell脚本将文件解析为单独的命令,然后可以对其进行分析。虽然没有时间戳。
tokoyami 2015年

谢谢@ Nobe4,这看起来很有用,几乎我正在寻找。我仍然想知道时间是否可以收藏。也许不是时间戳记,但是击键之间的时间差。这可能有助于找出事物发展的速度。
6D65

其实这对你们俩都是一个问题。只是不允许我在一条评论中指定提及。
6D65

这里有一个想法如何捕捉时间戳:使用下面的脚本和呼叫VIM是这样的:vim -w <(./test-io.py > log)vim -w <(tee raw-log | ./test-io.py > log)如果你想的原始输出,太)(* nix中唯一)。这应将所有带有时间戳的输入写成,每行一个字节log。我注意到的是,vim不会一一输出命令,而是将其刷新。
tokoyami 2015年

Answers:


4

-w命令行选项与文件一起传递时,Vim允许记录所有输入:

-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似乎保留了它在某个时刻和退出时刷新的输入的缓冲区。这使得时间戳相当不可靠。


是的 我想知道我是否可以为此提出新问题。也许有人对提供此功能感兴趣。或者,我可以先潜水,如果允许的话,尝试自己动手打补丁,尽管我可能没有时间。
2015年

@ 6D65我认为您可以向neovim项目建议一个输入调试日志功能,其中来自用户的每个输入都带有时间戳。我已经看到他们经常临时修补代码以尝试调试:terminal与输入有关的问题,因此它应该是一个有用的功能。我不熟悉它们具有的远程插件API,但是它也可能有某种实时获取输入的方法。
tokoyami

1
还是不要在Vim中执行此操作-使用系统键盘记录器(从Vim启动/停止)并解析该输出。
VanLaser
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.