escape-time
이 옵션은 ~/.tmux.conf
많은 Tmux 구성 파일에 존재하기 때문에 설정 했습니다 .
하지만 이 옵션을 설정한 후에는 실제로 어떤 효과도 볼 수 없습니다. 특히, escape-time
10000(10초) 으로 설정하면 모든 것이 여전히 "작동"합니다.
이것은 내 현재 설정입니다.
# ESC delay after prefix (ms)
set -sg escape-time 500
"ESC 지연"은 정확히 무엇을 의미하며 언제 사용됩니까?
답변1
터미널은 단순히 문자 스트림을 호스트에 보냅니다. 기본 키에 있는 키의 경우영숫자 부분일반적으로 인쇄 가능한 일반 문자나 C0 제어 문자를 보내기 때문에 키보드(ISO 9995 용어)에는 적합합니다.
⇧ Shift키보드의 다른 부분에 있는 커서 키, 기능 키, 편집 키 등의 경우에는 메인 부분의 키 코드(예: + ⇥ Tab또는) 에 대한 명확한 제어가 없더라도 상황이 다릅니다. +)는 ⎇ Alt가속기 수정 자로 사용됩니다 .
ECMA-35 및 ECMA-48은 시스템을 정의합니다.이스케이프 시퀀스, ESC 문자(U+001B)로 시작제어 순서, CSI 문자(U+009B, Control Sequence Introducer의 약자)로 소개됩니다. 터미널은 주로 후자를 사용합니다. ←예를 들어 키에 대해 전송되는 ECMA-48 CUB(CUrsor Backwards) 제어 시퀀스입니다.
세상이 기본적으로 발전하기 전인 1970년대에도 터미널(에뮬레이트된 터미널 포함)이 여전히 존재했다는 사실이 아니었다면 좋은 일이기도 합니다.8비트 깨끗함.
터미널은 PC 혁명, BBS 및 FidoNet 등의 유산인 홀수/짝수/패리티 없는 7비트 직렬 인코딩을 세계에서 여전히 널리 사용하는 것처럼 작동합니다. 1980년대 8N1을 지원하며 무덤파는 일을 도왔습니다. 그래서 그들은 사용한다7자리 별칭C1 제어 문자(예: CSI)를 전송하는 데 사용되는 형식입니다.
이 양식은 다음에 적합합니다.7비트 전송8비트 문자는 깔끔하게 전송될 수 없습니다. 이는 실제로 C1 제어 문자를 ESC 문자로 전송한 다음 C1 문자 코드에서 64를 뺀 문자를 전송한다는 의미입니다( ESC Fe
ECMA-35를 읽는 사용자의 경우). 이는 결국 모든 것을 의미합니다.제어 순서명목상 C1 제어 문자로 시작합니다.아니요이제 C0 제어 문자로 시작하는 키보드의 키에 해당합니다.예키보드의 키입니다.
알다시피, 성가신 사용자는 Esc이스케이프 시퀀스의 일부가 아닌 ESC 문자 자체를 보내는 키를 가지고 있습니다. 그들은 TUI 프로그램에서 "모드 변경" 또는 "작업 취소" 등을 의미하기 위해 이 단어를 사용하는 것을 좋아합니다. 몇 년 전 Apple이 이 키가 Apple 키보드의 실제 물리적 키가 되는 것을 차단했을 때 약간의 불만이 있었습니다.
그렇다면 및 (구현 시) vi
와 같은 프로그램 처럼 터미널 입력 문자를 문자별로 읽는 응용 프로그램은 무엇입니까?tmux
밖의터미널), 어떻게 해야 할까요? ESC 키를 가지고 있고 그것을 사용하는 것을 좋아하는 사용자와 7비트 전송을 통해 제어 시퀀스를 보내는 터미널을 어떻게 구별합니까?
시간 초과를 설정합니다. ESC 뒤의 문자가 충분히 빨리 도착하면 이는 ECMA-48 제어 시퀀스를 보내는 터미널일 가능성이 있으며 기계 속도로 그렇게 할 것입니다. ESC 이후의 캐릭터가 최소한의 지연 후에 도착한다면 이는 아마도인류Esc다른 것을 입력하기 전에 이 키를 입력하세요.
이것이 escape-time
바로 설정의 전부입니다.
tmux
당신을 보자구성시간 초과(VIM 및 NeoVIM에도 동일)는 종종 다른 프로그램에 의해 내장되어 있습니다. 10초로 설정하면 기계가 아마도 매우 느리다는 것을 알려주는 것인데, 이는 일반적으로 말이 되지 않습니다. 더대개수정 사항은줄이다당신은 빠르게 타자를 치는 사람이기 때문이다.
오늘날 이 아이디어의 주요 문제점은 프로그램에 SSH 및 네트워크 전송 지연을 도입하면 사람의 입력이 발생할 수 있다는 것입니다.정말 괜찮아이렇게 빨리 도착하는 이유는 이미 "로컬" 측에 수집되어 전송 창을 이동하기 위한 원격 호스트의 승인을 기다리고 있기 때문입니다. 네트워크의 가능성도 소개합니다.분리된ESC 문자 뒤에 지연을 생성하여 원격 호스트에서 실행되는 프로그램이 사람이 입력한 것으로 잘못 추측하게 만드는 기계 생성 제어 시퀀스입니다.
아마도 세상은 TCP도 8비트 깨끗하다는 것을 이해할 것입니다(예, 공식적으로는 그렇습니다.1981년 이후), 직렬 통신이 수십 년 동안 이어져 왔기 때문에 터미널은 실제로 7비트 별칭 대신 실제 CSI 문자를 보낼 수 있습니다. 이렇게 하면 터미널에서 생성된 제어 시퀀스와 성가신 사용자 키 입력(가속기 예약) 사이의 모호성이 줄어들고 Esc프로그램은 수신된 문자 사이의 시간을 측정하여 기계 또는 인간을 다루고 있는지 알 필요가 없습니다. .
결국,진짜터미널은 1980년대...1980년대 초반에 세계가 8비트로 깨끗해졌다는 사실을 이해합니다. 1983년에 DEC VT220이 출시되었고,S8C1T 제어 순서이는 터미널에 7비트 별칭 사용을 중지하고 올바른 U+009B 문자 전송을 시작하도록 지시합니다. 1987년 VT320이 출시될 당시 이는 단말기의 비휘발성 RAM에 저장되는 설정 기능이었으며 기본적으로 켜져 있었습니다. 동일한 설정공장 기본값은 8N1입니다..
추가 읽기
- 문자 코드 구조 및 확장 기술 . ECMA-35. 6판. 1994. ECMA 인터내셔널.
- 문자 세트 인코딩을 위한 제어 기능. ECMA-48. 5판. 1991. ECMA 인터내셔널.
:help timeout
. VIM 도움말.- MacBook Pro Touch Bar의 Esc 버튼을 사용하는 방법. 사과. 2020년 5월 6일
- GNU 화면으로 인해 Vim ESC 키가 느려집니다.
- ESC 키는 Alt+ 동작으로 인해 터미널에서 약간의 지연을 발생시킵니다.