Bagaimana cara merekam input keyboard saya untuk melakukan statistik?


12

Saya ingin mencari tahu pola apa yang paling umum saya gunakan selama pengkodean. Jadi saya sedang mencari cara untuk merekam semua input keyboard saya saat saya sedang vim, lebih disukai dengan cap waktu. Kemudian saya bisa melakukan beberapa analisis pada pola / gerakan yang paling baru digunakan, berapa waktu yang diperlukan untuk mengambil tindakan, dan mencari tahu hal-hal untuk dioptimalkan.

Apakah ada cara idiomatis untuk melakukan ini di Vim? Haruskah saya mencoba dan menulis plugin untuk ini? Apa implikasi kinerja dari melakukan sesuatu seperti ini?

Terima kasih


1
Anda harus mulai melihat -wbendera ketika Anda memulai vim. Anda dapat merekam setiap penekanan tombol dengan itu.
nobe4

4
Posting blog terkait ( tautan ). Ini menunjukkan kepada Anda cara merekam input Anda ( vim -w file.log) dan menyediakan skrip haskell untuk mem-parsing file menjadi perintah terpisah yang kemudian dapat Anda analisis. Tidak ada cap waktu.
tokoyami

Terima kasih @ Nobe4 ini terlihat berguna dan hampir saya cari. Saya masih bertanya-tanya apakah waktu entah bagaimana dapat ditagih. Mungkin bukan cap waktu, tetapi waktu berbeda antara penekanan tombol. Ini bisa membantu dengan mengetahui kecepatan dari segala sesuatu.
6D65

Sebenarnya itu adalah pertanyaan untuk kalian berdua. Itu tidak memungkinkan saya untuk menyebutkan dalam satu komentar.
6D65

Berikut ini adalah ide cara menangkap cap waktu: Gunakan skrip berikut dan panggil vim seperti ini: vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)jika Anda menginginkan output mentah juga) ( * hanya nix ). Ini akan menulis semua input Anda dengan stempel waktu, satu byte per baris, dalam log. Apa yang saya perhatikan adalah bahwa vim tidak menampilkan perintah satu per satu tetapi membersihkannya.
tokoyami

Jawaban:


4

Vim memungkinkan logging semua input ketika -wopsi baris perintah diteruskan dengan file:

-w {scriptout} Semua karakter yang Anda ketik direkam dalam file {scriptout}, sampai Anda keluar dari Vim. Ini berguna jika Anda ingin membuat file skrip untuk digunakan dengan "vim -s" atau ": source!". Jika file {scriptout} ada, karakter ditambahkan.

Sekarang kita memiliki akses ke input, kita dapat mengarahkannya ke tempat yang kita inginkan. Contohnya sebagai berikut ( hanya sistem * nix ):

vim -w >(./timestamper.py > log)
vim -w >(tee raw-log | ./timestamper.py > log) # If we want the raw log, too

Di mana timestamper.pyskrip python pendek berikut:

#!/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))

Skrip dapat diganti dengan program lain yang membutuhkan input jika Anda ingin melakukan sesuatu yang lebih canggih.

CATATAN: Setelah beberapa pengujian singkat, saya menemukan bahwa vim tampaknya menyimpan buffer input yang mengalir di beberapa titik dan saat keluar. Ini membuat cap waktu cukup tidak dapat diandalkan.


Ya. Saya ingin tahu apakah saya dapat mengangkat masalah neovim untuk ini. Mungkin cowok tertarik menyediakan fitur ini. Atau saya bisa menyelam lebih dulu dan mencoba menambalnya sendiri jika diizinkan, meskipun saya mungkin tidak punya waktu.
6D65

@ 6D65 Saya pikir Anda dapat menyarankan kepada proyek neovim fitur input log debug di mana setiap input dari pengguna ditampilkan dengan stempel waktu. Saya telah melihat mereka sering menambal sementara kode untuk mencoba dan men-debug :terminalmasalah yang berkaitan dengan input sehingga harus menjadi fitur yang berguna. Saya tidak terbiasa dengan API plugin jarak jauh yang mereka miliki, tetapi itu mungkin juga memiliki beberapa cara untuk mendapatkan input secara real time.
tokoyami

1
Atau jangan lakukan itu di Vim - gunakan logger keyboard sistem (mulai / berhenti dari Vim) dan uraikan hasilnya.
VanLaser
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.