Làm thế nào để ghi lại đầu vào bàn phím của tôi để làm số liệu thống kê về nó?


12

Tôi muốn tìm hiểu những mẫu phổ biến nhất tôi đang sử dụng trong quá trình mã hóa. Vì vậy, tôi đang tìm cách để ghi lại tất cả đầu vào bàn phím của mình trong khi tôi đang ở vim, tốt nhất là với dấu thời gian. Sau đó, tôi có thể thực hiện một số phân tích về các mô hình / chuyển động được sử dụng gần đây nhất mà một hành động thực hiện thời gian và tìm ra những điều cần tối ưu hóa.

Có một cách thành ngữ để làm điều này trong Vim? Tôi có nên thử và viết một plugin cho việc này không? Điều gì sẽ có ý nghĩa hiệu suất của việc làm một cái gì đó như thế này?

Cảm ơn


1
Bạn nên bắt đầu nhìn vào -wcờ khi bạn bắt đầu vim. Bạn có thể ghi lại mọi tổ hợp phím với nó.
nobe4

4
Bài đăng trên blog liên quan ( liên kết ). Nó chỉ cho bạn cách ghi lại đầu vào ( vim -w file.log) của bạn và cung cấp một tập lệnh haskell để phân tích tệp thành các lệnh riêng biệt mà sau đó bạn có thể phân tích. Không có dấu thời gian mặc dù.
tokoyami

Cảm ơn bạn @ Nobe4 điều này có vẻ hữu ích và gần như tôi đang tìm kiếm. Tôi vẫn tự hỏi nếu thời gian là một cách thu thập. Có thể không phải dấu thời gian, nhưng thời gian khác nhau giữa các lần nhấn phím. Điều này có thể giúp tìm ra tốc độ của mọi thứ.
6D65

Thật ra đó là một câu hỏi cho cả hai bạn. Nó chỉ không cho phép tôi chỉ định đề cập trong một bình luận.
6D65

Đây là một ý tưởng làm thế nào để ghi dấu thời gian: Sử dụng tập lệnh sau và gọi vim như thế này: vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)nếu bạn cũng muốn đầu ra thô) (chỉ * nix ). Điều này sẽ ghi tất cả đầu vào của bạn với dấu thời gian, một byte mỗi hàng, trong log. Điều tôi nhận thấy là vim không xuất từng lệnh một mà xóa chúng.
tokoyami

Câu trả lời:


4

Vim cho phép ghi nhật ký tất cả đầu vào khi -wtùy chọn dòng lệnh được truyền bằng một tệp:

-w {scriptout} Tất cả các ký tự bạn nhập được ghi lại trong tệp {scriptout}, cho đến khi bạn thoát Vim. Điều này hữu ích nếu bạn muốn tạo tệp tập lệnh được sử dụng với "vim -s" hoặc ": source!". Nếu tệp {scriptout} tồn tại, các ký tự sẽ được nối thêm.

Bây giờ chúng tôi có quyền truy cập vào đầu vào, chúng tôi có thể chuyển hướng nó đến nơi chúng tôi muốn. Cách sau đây chẳng hạn ( chỉ hệ thống * nix ):

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

timestamper.pyKịch bản python ngắn sau đây ở đâu :

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

Kịch bản có thể được thay thế bằng bất kỳ chương trình nào khác nhận đầu vào nếu bạn muốn làm một cái gì đó tinh vi hơn.

LƯU Ý: Sau một số thử nghiệm ngắn, tôi phát hiện ra rằng vim dường như giữ một bộ đệm của các đầu vào mà nó tuôn ra tại một số điểm và khi thoát. Điều này làm cho dấu thời gian khá không đáng tin cậy.


Vâng. Tôi tự hỏi nếu tôi có thể nêu ra một vấn đề neovim cho việc này. Có lẽ các chàng trai quan tâm đến việc cung cấp tính năng này. Hoặc tôi có thể lặn đầu tiên và cố gắng tự vá nó nếu được phép, mặc dù tôi có lẽ sẽ không có thời gian.
6D65

@ 6D65 Tôi nghĩ rằng bạn có thể đề xuất với dự án neovim một tính năng nhật ký gỡ lỗi đầu vào trong đó mọi đầu vào từ người dùng được hiển thị với dấu thời gian. Tôi đã thấy họ thường tạm thời vá mã để thử và gỡ lỗi :terminalcác vấn đề liên quan đến đầu vào, vì vậy đây sẽ là một tính năng hữu ích. Tôi không quen với API plugin từ xa mà họ có, nhưng điều đó cũng có thể có một số cách để có được đầu vào trong thời gian thực.
tokoyami

1
Hoặc không làm điều đó trong Vim - sử dụng bộ ghi bàn phím hệ thống (bắt đầu / dừng từ Vim) và phân tích đầu ra đó.
VanLaser
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.