나는 다음과 같은 매핑을 만들었습니다.~/.zshrc
bindkey -s '^[u' 'whatever string'
vim
다음 규칙을 설정하여 패턴을 활성화했습니다.~/.zshrc
bindkey -v
내가 겪고 있는 문제는 삽입 모드에 있을 때 일반 모드로 들어가고 싶을 때 발생합니다. Escape
를 누르면 커서 위치의 명령 프롬프트에 추가됩니다 u
. whatever string
이는 을 누를 때마다 Escape
누를 수 없는 유일한 키는 u
일반 모드로 들어가는 것임을 의미합니다. 그렇지 않으면 추가하겠습니다 whatever string
.
그래서 제 질문은 다음을 눌러 전환 되지 않도록 Alt + u
추가하도록 매핑하는 방법입니다 .whatever string
Escape
u
PD1: 이것은 최소한의 작업 예입니다.
PD2:현재 사용 중인 해결 방법은 키를 누르는 것입니다. Escape + {no map} + u
( {no map}
아직 매핑되지 않은 키는 어디에 있습니까 Alt
?)
답변1
~처럼@JdeBP 라고, 이제 사용자가 키를 길게 누르면 터미널은 EscapeU u+001B U+0075 ( )와 같은 동일한 문자 시퀀스를 전송합니다.uAlt\eu
Alt그러나 +의 경우 u두 문자를 동시에 보내는 반면, 의 Escape경우 u사용자가 두 문자를 동시에 누르지 않기 때문에 전송과 문자 사이에 지연이 있으므로 일반적으로 애플리케이션에서 알 수 있습니다. 차이나는 곳.\e
u
줄 편집기에서 zsh
키 바인딩이 있을 때 키 누르기가 수신 후 몇 센티초 이내에 수신되지 않거나 이외의 문자가 있는 경우 실행됩니다.x
xy
x
y
$KEYTIMEOUT
x
y
기본값은 $KEYTIMEOUT
40(0.4초)입니다. 이 값을 사용하면 사용자가 다중 문자 바인딩을 수동으로 입력할 수 있지만, 다중 문자 바인딩 키 조합 또는 기능 키가 누를 때만 트리거되도록 사람이 키 시퀀스를 너무 빨리 입력할 수 없을 정도로 작게 설정할 수 있습니다.
예를 들어 1(0.01초)로 변경하면 바인딩이 실행된 후 빠르게 입력 $KEYTIMEOUT
해야 합니다 .uEscape\eu
이는 zsh에만 국한되지 않습니다. 사용자 정의 키 바인딩을 허용하는 대부분의 대화형 터미널 애플리케이션에는 동일한 설정이 있습니다. 예를 들어 라인 편집기( , , ... readline
사용)에서 이는 변수(기본값 0.5초)이고, 보기 변수 및 환경 변수(기본값 1초)는 1입니다. 두번째).bash
python
gdb
keyseq-timeout
ncurses
ESCDELAY
vim
tm
ttm
답변2
터미널이 (가상) 와이어를 통해 호스트로 문자를 전송할 때,차이 없음키 시퀀스 Esc U와 키 코드 사이 ⎇ Alt+ U또는 복합 키 시퀀스 사이 ⎈ Control+ [ U.
␛
그것들은 모두 문자 다음에 문자 로 인코딩됩니다 u
. Z 쉘은 터미널에서 나오는 입력 문자 스트림에서 차이를 보지 못하므로 구별할 수 없습니다. 터미널 I/O 응용 프로그램은 키 입력이 아닌 문자를 봅니다.