我刚开始研究一种工具,可以帮助我提高Vim的工作效率。我希望它将每个击键记录到一个文件,然后识别低效的使用模式。我希望它能为每次按键存储一个时间戳。
我尝试使用-w和-W vim选项将每个击键转储到管道。但是,Vim不会在线报告击键,因此我无法获得可靠的时间戳。
我还尝试拦截来自tty的输入,将其写入管道并将其重定向为Vim的stdin。但随后Vim退出:
Vim: Warning: Input is not from a terminal
我也发现了捕获每个键的技巧:http://vim.wikia.com/wiki/Capture_all_keys。我对vimscript一无所知,但我觉得这不是我想要的。
所以我现在的想法是:我需要拦截来自tty的输入,处理它然后将它写入Vim将用作输入的假tty。你是否同意这是最好的方法?如果是的话,有关我如何做到这一点的任何提示?
答案 0 :(得分:2)
在进一步挖掘并查看'script'源代码后,我发现了这个:
man 7 pty
man 4 pts
man 3 openpty
创建一个新的伪终端似乎是去这里的方式,我打算试一试。
编辑:它似乎正在发挥作用。如果有人遇到类似的问题,可以在https://github.com/Baranowski/habit-vim/找到该项目。
答案 1 :(得分:1)
一种可能的方法是修补Vim代码:在循环中,捕获键盘输入,保存它们,并将它们写入您的文件。 (或者你可以将它们添加到.viminfo
)
https://code.google.com/p/vim/source/browse/src/gui.c
似乎以下功能正在等待用户输入。
int gui_wait_for_chars(wtime)
所以你可以从那里找到键盘输入的入口点。
答案 2 :(得分:1)
如果您正在使用mac os x,则可以使用this code将关键输入记录到vim
。
此代码大量借用旧的unix script
命令,open source。
使用它看起来像这样(在下载源代码之后):
$ 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
,但它可能包含许多控制字符,导致输出难以阅读。
另外,请不要将该代码用于恶意目的。这有点危险。
答案 3 :(得分:0)
由于这与Vim没有直接关系(并且可以同样用于改进其他键盘驱动应用程序的使用),我不会尝试在Vim中实现这一点(正如您已经发现的那样,接近不可能),而是通过操作系统手段截取密钥,例如通过自定义键盘驱动程序或键盘记录程序。可能有几种实现方式可以帮助您入门。