キーボード入力を記録して統計を行う方法は?


12

私がコーディング中に使用している最も一般的なパターンを知りたいのですが。だから私はvimにいる間、できればタイムスタンプを使って、すべてのキーボード入力を記録する方法を探しています。次に、最も最近使用されたパターン/モーションを分析して、アクションが実行される時間を特定し、最適化するものを見つけることができます。

Vimでこれを行う慣用的な方法はありますか?このためのプラグインを書いてみましょうか?このようなことを行うと、パフォーマンスにどのような影響がありますか?

ありがとう


1
-wvimを起動するときは、フラグを確認する必要があります。あなたはそれですべてのキーストロークを記録することができます。
nobe4

4
関連ブログの投稿(リンク)。入力(vim -w file.log)を記録する方法を示し、ファイルを個別のコマンドに解析して分析できるようにするhaskellスクリプトを提供します。ただし、タイムスタンプはありません。
tokoyami 2015

@ Nobe4ありがとうこれは便利に見え、ほとんど私が探していました。時間はどういうわけか収集可能かどうか私はまだ疑問に思います。タイムスタンプではないかもしれませんが、キーストローク間で時間が異なります。これは、物事の進行速度を見つけるのに役立ちます。
6D65

実際、それはあなた方双方にとっての質問でした。1つのコメントで言及を指定することができませんでした。
6D65

タイムスタンプをキャプチャする方法は次のとおりです。次のスクリプトを使用して、次のようにvimを呼び出しますvim -w <(./test-io.py > log)vim -w <(tee raw-log | ./test-io.py > log)生の出力も必要な場合)(* nixのみ)。これにより、すべての入力がタイムスタンプ付きで、1行に1バイトずつ書き込まれlogます。私が気付いたことは、vimがコマンドを1つずつ出力するのではなく、それらをフラッシュすることです。
tokoyami 2015

回答:


4

Vimでは、-wコマンドラインオプションがファイルとともに渡されたときに、すべての入力をログに記録できます。

-w {scriptout} Vimを終了するまで、入力したすべての文字がファイル{scriptout}に記録されます。これは、「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が保持しているように見えることがわかりました。これにより、タイムスタンプはかなり信頼できなくなります。


うん。私はこのためにneovim問題を提起することができるのだろうかと思います。多分男はこの機能を提供することに興味があります。または、頭を先に潜らせて、許可されている場合は自分でパッチを適用することもできますが、おそらく時間がありません。
6D65

@ 6D65 neovimプロジェクトに、ユーザーからのすべての入力がタイムスタンプとともに表示される入力デバッグログ機能を提案できると思います。:terminal入力に関連する問題を試したりデバッグしたりするために一時的にコードにパッチを適用することがよくあるので、便利な機能になるはずです。私は彼らが持っているリモートプラグインAPIに詳しくありませんが、リアルタイムで入力を取得する方法もあるかもしれません。
tokoyami

1
またはVimで実行しないでください-システムキーボードロガー(Vimから起動/停止)を使用して、その出力を解析します。
VanLaser、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.