Üzerinde istatistik yapmak için klavye girişimi nasıl kaydedebilirim?


12

Kodlama sırasında kullandığım en yaygın kalıpların neler olduğunu öğrenmek istiyorum. Bu yüzden vim'deyken, tercihen zaman damgalarıyla tüm klavye girişimi kaydetmenin bir yolunu arıyorum. Daha sonra, bir eylemin ne zaman alacağı en son kullanılan kalıplar / hareketler hakkında biraz analiz yapabilir ve optimize edilecek şeyleri bulabilirim.

Vim'de bunu yapmanın deyimsel bir yolu var mı? Bunun için bir eklenti yazmayı deneyeyim mi? Böyle bir şey yapmanın performans üzerindeki etkileri nelerdir?

Teşekkürler


1
-wVim'e başladığınızda bayrağa bakmaya başlamalısınız. Her tuş vuruşunu bununla kaydedebilirsiniz.
nobe4

4
İlgili blog yazısı ( bağlantı ). vim -w file.logGirişinizi ( ) nasıl kaydedeceğinizi gösterir ve dosyayı analiz edebileceğiniz ayrı komutlara ayrıştırmak için bir haskell betiği sağlar. Gerçi zaman damgası yok.
tokoyami

Teşekkür ederim @ Nobe4 bu yararlı görünüyor ve neredeyse arıyordu. Hala zamanın bir şekilde tahsil edilebilir olup olmadığını merak ediyorum. Belki zaman damgaları değil, zaman tuş vuruşları arasında zaman farklıdır. Bu, işlerin nasıl gittiğinin hızını bulmanıza yardımcı olabilir.
6D65

Aslında bu ikiniz için bir soruydu. Sadece bir yorumda bahsetmeme izin vermiyordu.
6D65

Zaman damgasını nasıl yakalayacağınız hakkında bir fikir: Aşağıdaki komut dosyasını kullanın ve vim'i şöyle çağırın: vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)ham çıktıyı da istiyorsanız) ( yalnızca * nix ). Bu, tüm girişlerinizi satır başına bir baytlık zaman damgalarıyla yazmalıdır log. Fark ettiğim şey, vim'in komutları birer birer çıkarmaması, ancak onları temizlemesi.
tokoyami

Yanıtlar:


4

Vim, -wkomut satırı seçeneği bir dosyayla iletildiğinde tüm girdilerin günlüğe kaydedilmesine izin verir :

-w {scriptout} Yazdığınız tüm karakterler siz Vim'den çıkıncaya kadar {scriptout} dosyasına kaydedilir. Bu, "vim -s" veya ": source!" İle kullanılacak bir komut dosyası oluşturmak istiyorsanız kullanışlıdır. {Scriptout} dosyası varsa karakterler eklenir.

Şimdi girdiye erişebildiğimize göre, onu istediğimiz yere yönlendirebiliriz. Örneğin şu şekilde ( yalnızca * nix sistemleri ):

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

timestamper.pyAşağıdaki kısa python betiği nerede :

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

Daha karmaşık bir şey yapmak istiyorsanız komut dosyası, girdi alan başka bir programla değiştirilebilir.

NOT: Bazı kısa testlerden sonra vim'in bir noktada ve çıkışta yıkadığı girişlerin tamponunu tuttuğunu öğrendim. Bu, zaman damgalarını oldukça güvenilmez kılar.


Evet. Bunun için bir neovim sorunu gündeme getirebilir miyim acaba? Belki de çocuklar bu özelliği sağlamakla ilgileniyorlar. Ya da önce kafaya dalabilir ve izin verilirse kendimi yamalamaya çalışabilirim, ancak muhtemelen zamanım olmayacak.
6D65

@ 6D65 Neovim projesine, kullanıcıdan gelen her girişin bir zaman damgası ile gösterildiği bir giriş hata ayıklama günlüğü özelliği önerebileceğinizi düşünüyorum. Onları sık sık geçici :terminalolarak yararlı bir özellik olmalı giriş ile ilgili sorunları denemek ve hata ayıklamak için kod yama gördüm . Onlar sahip uzak eklenti API aşina değilim, ama aynı zamanda gerçek zamanlı giriş almak için bir yolu olabilir.
tokoyami

1
Ya da Vim'de yapmayın - bir sistem klavye günlüğü kullanın (Vim'den başlatıldı / durduruldu) ve bu çıktıyı ayrıştırın.
VanLaser
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.