10

我刚刚开始研究一种工具来帮助我提高 Vim 的工作效率。我希望它将每次击键记录到文件中,然后识别低效的使用模式。我希望它为每次击键存储一个时间戳。

我尝试使用 -w 和 -W vim 选项将每次击键转储到管道。但是,Vim 不会在线报告击键,因此我无法获得可靠的时间戳。

我还尝试截取来自 tty 的输入,将其写入管道并将其重定向为 Vim 的标准输入。但随后 Vim 就退出了:

Vim: Warning: Input is not from a terminal

我还发现了捕获每个键的技巧:http: //vim.wikia.com/wiki/Capture_all_keys。我对 vimscript 一无所知,但我感觉这不是我想要的。

所以我现在的想法是:我需要截取来自 tty 的输入,对其进行处理,然后将其写入 Vim 将用作输入的一些假 tty。你同意这是最好的方法吗?如果是这样,关于我如何做到这一点的任何提示?

4

4 回答 4

2

在深入挖掘并查看“脚本”源代码后,我发现了这一点:

man 7 pty
man 4 pts
man 3 openpty

创建一个新的伪终端似乎是这里的方法,我要试一试。

编辑:它似乎工作。如果有人遇到类似问题,可以在https://github.com/Baranowski/habit-vim/找到该项目。

于 2013-05-30T20:47:03.750 回答
1

一种可能的方法是修补 Vim 代码:​​在循环中,捕获键盘输入,保存它们并将它们写入您的文件。(或者你可以以某种方式将它们添加到.viminfo

https://code.google.com/p/vim/source/browse/src/gui.c

似乎以下函数正在等待用户输入。

  int gui_wait_for_chars(wtime)

因此,您也许可以从那里找到键盘输入的入口点。

于 2013-05-30T13:12:11.110 回答
1

如果您正在使用 mac os x,则可以使用此代码将您的关键输入记录到vim.

这段代码大量借鉴了旧的 unixscript命令,它是开源的。

使用它看起来像这样(下载源代码后):

$ make keylog          # No Makefile needed for an easy case like this.
$ ./keylog vim myfile  # ... and use vim a bit, then exit.
$ hexdump -C outfile   # `outfile` is the hard-coded keylog file name.

您也可以cat outfile,但它可能包含许多使输出难以阅读的控制字符。

另外,请不要将该代码用于恶意目的。这有点危险。

于 2015-07-02T22:08:32.343 回答
0

由于这与 Vim 没有直接关系(并且可以同样应用于改进其他键盘驱动应用程序的使用),我不会尝试在 Vim 中实现它(正如您已经发现的那样,这几乎是不可能的),而是通过操作系统方式截取按键,例如通过自定义键盘驱动程序或键盘记录器。可能有几种实现可以帮助您入门。

于 2013-05-30T10:31:08.083 回答