'O'명령을 사용할 때마다 vim이 1 초 동안 지연되는 이유는 무엇입니까 (위의 새 줄을 열고 삽입)?


26

대부분의 명령을 사용하면 즉시 적용됩니다. O그러나 명령을 사용하면 "O"가 현재 문자를 약 1 초 동안 바꾼 다음 현재 문자가 반환되고 새 줄이 삽입되어 열립니다.

나는 o명령에 그런 문제가 없다 ( 아래 줄을 열고 삽입하십시오).

차이가 나는 경우 우분투 10.04의 그놈 터미널에서 vimfrom을 사용 하고 bash있습니다.

답변:


27

이전에 누른 키가 ESC 인 경우 ESC O로 시작하는 이스케이프 시퀀스를 생성 할 수있는 키가 있기 때문입니다. 예를 들어 커서 키 모드에 따라 위쪽 화살표 키는 이스케이프 시퀀스 ESC O A를 생성 할 수 있습니다.

부분 이스케이프 시퀀스가 ​​표시되면 vim은 터미널 유형에 정의 된 이스케이프 시퀀스 중 하나와 일치하는 다른 문자가 수신되는지 확인하기 위해 짧은 시간 초과를 기다립니다. 그렇지 않은 경우 문자를 별도의 키 입력으로 취급합니다. 라인이 열리기를 기다리는 동안 대문자 A를 입력하여이를 위쪽 화살표로 취급하는지 확인할 수 있습니다.

이를 제어하는 ​​데 사용할 수있는 vim 설정이 있습니다. :set ttimeoutlen=100이스케이프 시퀀스 시간 초과를 100ms로 변경합니다. :set noesckeys삽입 모드에있을 때 이스케이프 시퀀스를 보내는 키 인식을 완전히 비활성화합니다. 또한 해당 모드에서 esckeys가 꺼져 있기 때문에 vi 호환 모드에는이 문제가 없습니다 vim -u NONE. 이것이 작동 하는 이유 입니다.


명확히하기 위해, 140k 라인 파일을 사용한 "실험"은 표준 플러그인 및 파일 유형을 갖춘 완전한 vim 모드에있었습니다. 내가 사용했다고 결론을 내렸지 -u NONE만 여전히 OP의 확인이 부족한 것으로 보입니다 .
msw

와우! 그것은 잠시 동안 약간 자극적이었습니다. 그러나 나는 그것에 대해 생각한 적이 없습니다. 이제 완벽하게 이해됩니다. Esc OA는 실제로 위쪽 화살표처럼 작동합니다.
Vitaly Kushner

2
:set noesckeys아마도 당신이 원하는 것이 아닐 것입니다-그것을 설정하고 삽입 모드에서 화살표 키를 누르십시오. 사용하지 않으려는 경우에도 그렇게하지 않으려 고합니다! noesckeys는 또한 삽입 모드 외부에서 속도를 높이 지 않습니다. ttimeoutlen가는 길입니다
JonnyRaa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.