showcmd를 사용하여 명령 기록 표시


11

set showcmdVim을 사용 하면 화면의 마지막 줄에 부분 명령이 표시됩니다. 예를 들어, 일반 모드에서는 명령을 입력 할 때 dt.마지막 행이 표시 dt되고 .명령 을 누르면 명령이 완료되어 아무 것도 표시되지 않습니다.

전체 명령을 표시하는 방법이 있습니까? 예를 들어을 입력 dt.gU(하면 먼저 dt.표시됩니다. 두 번째 명령을 입력하기 시작하면 첫 번째 명령이 지워 지므로 결국에만 gU(표시됩니다.

예를 들어 GIF를 설명하는 데 유용 할 수 있습니다. 예기치 않은 결과가 발생하면 원하는 내용을 입력했는지 확인하십시오.


1
완전한 명령은 무엇입니까? 는 dt이 계류중인 현재 운영자이기 때문에 표시됩니다. 일단 모션이 주어지면 더 이상 보류중인 운영자가 아닙니다. 우리가 더 나아가고 있다고 가정 해보십시오 dt.gU(gu)daw. 그 모든 것이 "하나의 전체 명령"입니까, 아니면 4 개의 전체 명령입니까?
davidlowryduda

4 개의 명령으로 계산되는 @mixedmath 대답의 두 번째 단락은 내가 의미하는 바를 명확하게하려고 시도합니다.
Gonçalo Ribeiro

2
Vim의 관점에서 볼 때, dt.gU(2 개의 명령이 있습니다 : dt. 그리고 gU(.... 그래서 당신이 정말로 원하는 것은 일종의 명령 히스토리를 보여주는 것입니다 (Vim은 이미 "full comamnds"를 보여줍니다).
Martin Tournoij

@Carpetsmoker, 그래, 내가 원하는 것일지도 모른다. 질문 제목을 편집 해 주셔서 감사합니다.
Gonçalo Ribeiro

3
나는 정상적인 역사를 다루는 Vim 소스 코드를 파고 들었다 . 에서 src/normal.c코드를 호출 clear_showcmd()여러 장소에서 ( normal_cmd(), do_pending_operator(), end_visual_mode()). 나는 showcmd_buf그 시점에서 파일에 덤프하는 것을 가지고 놀고 있는데, 꽤 좋아 보이지만 Vim 소스 코드를 수정하고 다시 빌드하지 않으면 원하는 것을 얻을 수 없다는 것을 확신합니다. 물론, 그렇게하는 것은 당신의 gif를 만드는 번거 로움의 가치가 있습니다.
John O'M.

답변:


9

정규 Vim 에서이 작업을 수행 할 수있는 방법을 찾지 못했습니다. 그러나 Vim을 기꺼이 패치하려는 경우 다음이 적합 할 수 있습니다.

매우 간단한 패치 (Vim-7.4.052에 적용)는 일반 명령이 끝날 때 기록을 지우는 화면의 실제 업데이트를 비활성화합니다. showcmd_is_clear디스플레이를 업데이트하기 전에 설정 여부를 반환 하여이를 수행합니다. (또는, 당신은 if 문을 주석 단 하나의 원래 남길 수 있습니다 return선을. 메모 : 패치는 아래에 잘 붙여하지 않았다, 당신은 손으로 이것을 적용 할 수 있습니다, 그것은 단지 짧은 한 줄이더라도. 메모를 : 실제 라인은 시각적 모드에서 선택된 라인 수 또는 기타 다른 항목의 표시를 업데이트하는 데 사용되는 것처럼 보이므로 주석 처리 하지 않았습니다display_showcmd() .

--- src/normal.c    2015-02-14 00:21:23.286352257 -0500
+++ src/normal.c    2015-02-14 00:21:25.238352173 -0500
@@ -4029,6 +4029,7 @@
    /* Don't actually display something if there is nothing to clear. */
    if (showcmd_is_clear)
        return;
+   return;
     }

     display_showcmd()

결과는 다음과 같습니다.

패치를 보여주는 스크린 캐스트

몇 가지 흥미로운 점 :

  • 이 쇼도 간단한 운동 같은 j, k, b, 등
  • x명령은 실제로이된다 dlshowcmd_buf에.
  • 결론을 변경하는 명령은 showcmd 영역을 제거합니다 (예 : :명령을 사용 하거나 삽입 모드로 들어가기 (적어도 내 설정에서는)).
  • 캡처 프로그램은을 입력 한 후 많은 스트로크 기록을 중지 "했지만 긴 레지스터 지정된 yank의 vim 창에서 키 시퀀스가 ​​표시됩니다.
  • 캐스트에는 표시되지 않지만 esc일반 모드에서 타격 ^[은 showcmd 영역에 표시 됩니다.

4

John 솔루션 외에도 파일에 입력하는 -w모든 문자를 기록 하는 매개 변수를 사용하여 누른 모든 vim 키 입력을 표시하는 다른 방법 이 있습니다. 문제는 vim이 Vim을 종료 할 때만 키 입력을 기록한다는 것입니다. 이것이 VimGolf의 작동 방식입니다.

이 문제를 해결하기 위해 Kana Natsuno 는이 단일 라인 패치 를 사용하여 -w옵션의 버퍼링을 비활성화 하므로 실시간 키 스트로크 스트림에 액세스 할 수 있습니다. 그런 다음 읽거나 (예 tail -f:) 파싱하거나 상태 표시 줄 ( :set statusline) 에 표시 할 수 있습니다 .

MacVim 의 Drew의 실시간 스트림 키 스트로크 분기 를 사용하여 Vim의 사용자 정의 빌드를 확인 하여 실시간 키 스트로크 스트림을 얻으십시오.

출처 : Vimprint- Drew Neil 블로그 의 Vim 키 스트로크 파서

비디오 자습서 또는 GIF에서 Vim 눌린 키 입력을 표시하려는 경우에 유용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.