키 바인딩 문제 이해

키 바인딩 문제 이해

설정과 zsh 세션이 있습니다

~ bindkey | grep help    
"^[H" run-help
"^[h" run-help

"Control + [ + h"를 누르면 커서 아래의 단어가 삭제되고 아무 일도 일어나지 않는데 "Alt + h"를 누르면 매뉴얼 페이지가 올바르게 열리는 이유는 무엇입니까?

답변1

Control+를 누른 [다음 즉시 누르세요 h.

터미널은 키 입력을 셸에 직접 보내지 않습니다(예: Control누르기/손 떼기). 대신 터미널은 누른 키에 따라 일련의 문자를 보냅니다. 순서에 따라 키를 동시에 누르는 것이 아니라 순차적으로 눌러야 합니다. 가장 큰 예외는 Control- 키와 Alt특정 시퀀스를 생성하기 위해 다른 키와 동시에 누르는 - 키입니다.

이미 알고/알고 있듯이 -key의 기호 ^로 사용되지만 다음 문자와 조합하여 사용될 때만 이 의미를 갖습니다. + 또는 + 를 나타내며 , 대문자와 소문자 조합의 키 순서는 동일합니다(이것이 터미널이 쉘 관련 단축키가 아닌 자체 단축키로 ++ 를 자주 사용하는 이유입니다 ).Control^AControlaControlAControlControlShiftSOMEKEY

^[문자 그대로 Control+ 를 의미합니다 [. 님도 보냈습니다 Escape. 따라서 + 다음에 (소문자!) 가 오는 ^[a것을 의미합니다 . 또한 -key는 누른 키가 뒤따르는 시퀀스도 전송합니다. 따라서 + 도 전송 됩니다 .​​Control[aAlt^[Alta^[aAltShifta^[A


따라서 예를 들어 다음 중 하나를 누를 수 있습니다("+"는 "동시에"를 의미하고 ","는 "순차적으로"를 의미함).

  • ~을 위한^[h
    • Alt+h
    • Escape,h
    • Control+ [,h
  • ~을 위한^[H
    • Control+ [, Shift+h
    • Alt+ Shift+h
    • Escape, Shift+h

PgUp, 또는 같은 특수 키 도 키 시퀀스를 보냅니다 Backspace. 이는 일반적으로 터미널 에뮬레이터에 따라 다릅니다. 또는 위젯을 사용하여 키 시퀀스를 표시할 수 있습니다 . 기본적으로 해당 모드에 바인딩되어 있습니다. 따라서 +를 누른 다음 관련 키 조합을 누르면 사용할 수 있는 순서가 표시됩니다 . 내 컴퓨터 에서는 다음을 얻습니다.ReturnKP_Enterquoted-insertvi-quoted-insert^VControlvbindkeytermite

  • PgUp: ^[[5~, 또한 Control+ [, [, 5, ~또는 Escape, [, 5, ~또는 Alt+ [, 5,~
  • Backspace: ^?, 이것도 Control+?
  • Return: ^M, 이것도 Control+m
  • KP_Enter: ^[OM, 또한 Control+ [, Shift+ o, Shift+ m또는 Alt+ Shift+ o, Shift+m

이론적으로 키 시퀀스는 임의로 길고 복잡할 수 있습니다. 예를 들어:

bindkey '^[xfooba^r' run-help

Alt+ x, f, o, o, b, a, Control+ 는 위젯을 r실행합니다 .run-help

zsh다중 문자 시퀀스를 허용하기 전에 특정 시간 동안만 다른 문자를 기다린다는 점에서 약간의 제한이 있습니다 . 이 시간 초과는 매개변수에서 구성 가능하며 KEYTIMEOUT100분의 1초 단위로 측정됩니다. 기본값은 400.4초입니다.

답변2

^[실제로는 이스케이프 문자를 의미합니다. 여기를 확인하세요:https://en.wikipedia.org/wiki/ASCII

귀하의 경우 ALT 키는 Esc 키와 동의어인 것 같습니다. https://en.wikipedia.org/wiki/Alt_key

관련 정보