설정과 zsh 세션이 있습니다
~ bindkey | grep help
"^[H" run-help
"^[h" run-help
"Control + [ + h"를 누르면 커서 아래의 단어가 삭제되고 아무 일도 일어나지 않는데 "Alt + h"를 누르면 매뉴얼 페이지가 올바르게 열리는 이유는 무엇입니까?
답변1
Control+를 누른 [다음 즉시 누르세요 h.
터미널은 키 입력을 셸에 직접 보내지 않습니다(예: Control누르기/손 떼기). 대신 터미널은 누른 키에 따라 일련의 문자를 보냅니다. 순서에 따라 키를 동시에 누르는 것이 아니라 순차적으로 눌러야 합니다. 가장 큰 예외는 Control- 키와 Alt특정 시퀀스를 생성하기 위해 다른 키와 동시에 누르는 - 키입니다.
이미 알고/알고 있듯이 -key의 기호 ^
로 사용되지만 다음 문자와 조합하여 사용될 때만 이 의미를 갖습니다. + 또는 + 를 나타내며 , 대문자와 소문자 조합의 키 순서는 동일합니다(이것이 터미널이 쉘 관련 단축키가 아닌 자체 단축키로 ++ 를 자주 사용하는 이유입니다 ).Control^A
ControlaControlAControlControlShiftSOMEKEY
^[
문자 그대로 Control+ 를 의미합니다 [. 님도 보냈습니다 Escape. 따라서 + 다음에 (소문자!) 가 오는 ^[a
것을 의미합니다 . 또한 -key는 누른 키가 뒤따르는 시퀀스도 전송합니다. 따라서 + 도 전송 됩니다 .Control[aAlt^[
Alta^[a
AltShifta^[A
따라서 예를 들어 다음 중 하나를 누를 수 있습니다("+"는 "동시에"를 의미하고 ","는 "순차적으로"를 의미함).
- ~을 위한
^[h
- Alt+h
- Escape,h
- Control+ [,h
- ~을 위한
^[H
- Control+ [, Shift+h
- Alt+ Shift+h
- Escape, Shift+h
PgUp, 또는 같은 특수 키 도 키 시퀀스를 보냅니다 Backspace. 이는 일반적으로 터미널 에뮬레이터에 따라 다릅니다. 또는 위젯을 사용하여 키 시퀀스를 표시할 수 있습니다 . 기본적으로 해당 모드에 바인딩되어 있습니다. 따라서 +를 누른 다음 관련 키 조합을 누르면 사용할 수 있는 순서가 표시됩니다 . 내 컴퓨터 에서는 다음을 얻습니다.ReturnKP_Enterquoted-insert
vi-quoted-insert
^V
Controlvbindkey
termite
- 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
다중 문자 시퀀스를 허용하기 전에 특정 시간 동안만 다른 문자를 기다린다는 점에서 약간의 제한이 있습니다 . 이 시간 초과는 매개변수에서 구성 가능하며 KEYTIMEOUT
100분의 1초 단위로 측정됩니다. 기본값은 40
0.4초입니다.
답변2
^[
실제로는 이스케이프 문자를 의미합니다. 여기를 확인하세요:https://en.wikipedia.org/wiki/ASCII
귀하의 경우 ALT 키는 Esc 키와 동의어인 것 같습니다. https://en.wikipedia.org/wiki/Alt_key