통계를 수행하기 위해 키보드 입력을 기록하는 방법은 무엇입니까?


12

코딩 중에 사용하는 가장 일반적인 패턴이 무엇인지 알고 싶습니다. 그래서 나는 vim에있을 때, 바람직하게 타임 스탬프로 모든 키보드 입력을 녹음하는 방법을 찾고 있습니다. 그런 다음 가장 최근에 사용한 패턴 / 모션에 대한 분석을 수행하여 작업에 소요되는 시간을 파악하고 최적화 할 사항을 찾을 수 있습니다.

Vim에서 이것을하는 관용적 방법이 있습니까? 플러그인을 작성 해볼까요? 이와 같은 작업을 수행 할 때 성능에 미치는 영향은 무엇입니까?

감사


1
-wvim을 시작할 때 깃발을보기 시작해야합니다 . 모든 키 입력을 기록 할 수 있습니다.
nobe4

4
관련 블로그 게시물 ( 링크 ) 입력을 기록하는 방법 ( vim -w file.log) 을 보여주고 파일을 별도의 명령으로 구문 분석하여 분석 할 수있는 haskell 스크립트를 제공합니다. 타임 스탬프는 없습니다.
tokoyami

@ Nobe4 감사합니다.이 유용하게 보이며 거의 찾고있었습니다. 나는 시간이 어떻게 든 수집 가능한지 여전히 궁금하다. 타임 스탬프가 아니라 키 스트로크 사이의 시간 차이가있을 수 있습니다. 이것은 일이 진행되는 속도를 찾는 데 도움이 될 수 있습니다.
6D65

사실 그것은 두 사람 모두에게 질문이었습니다. 한 의견에서 언급을 지정할 수 없었습니다.
6D65

타임 스탬프를 캡처하는 방법은 다음과 같습니다. 다음 스크립트를 사용하여 vim을 다음 과 같이 호출하십시오. vim -w <(./test-io.py > log)( vim -w <(tee raw-log | ./test-io.py > log)원시 출력을 원할 경우) ( * nix 전용 ). 이것은 모든 입력을에 타임 스탬프 (행당 1 바이트)로 기록해야합니다 log. 내가 주목 한 것은 vim이 명령을 하나씩 출력하지 않지만 플러시한다는 것입니다.
tokoyami

답변:


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다음 짧은 파이썬 스크립트는 어디에 있습니까?

#!/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이 특정 시점과 종료시 플러시하는 입력 버퍼를 유지하는 것으로 나타났습니다. 타임 스탬프를 상당히 신뢰할 수 없게 만듭니다.


네. 네오 빔 문제를 제기 할 수 있을지 궁금합니다. 아마도이 기능을 제공하는 데 관심이있을 수 있습니다. 또는 시간이 없을 것 같지만, 먼저 머리를 다이빙하고 허용된다면 스스로 패치를 시도 할 수 있습니다.
6D65

@ 6D65 Neovim 프로젝트에 사용자의 모든 입력이 타임 스탬프로 표시되는 입력 디버그 로그 기능을 제안 할 수 있다고 생각합니다. 나는 종종 :terminal입력과 관련된 문제 를 시도하고 디버그하기 위해 코드를 일시적으로 패치 하여 유용한 기능 이되는 것을 보았습니다 . 나는 그들이 가지고있는 원격 플러그인 API에 익숙하지 않지만 실시간으로 입력을 얻는 방법이있을 수 있습니다.
tokoyami

1
또는 Vim에서하지 마십시오-Vim에서 시작 / 중지 된 시스템 키보드 로거를 사용하여 출력을 구문 분석하십시오.
VanLaser
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.