bash 단축키에 Ctrl+m과 Ctrl+q가 사용되지 않는 이유는 무엇입니까?

bash 단축키에 Ctrl+m과 Ctrl+q가 사용되지 않는 이유는 무엇입니까?

최근에 나는 bash 단축키를 검토하고 내 tmux 활성화 키에 적합한 단축키를 찾으려고 노력했습니다.

나는 bash 단축키에 사용되지 않는 ctrl + m것이 흥미롭다고 생각합니다 .ctrl + qhttps://en.wikipedia.org/wiki/Bash_(Unix_shell).

왜 사용되지 않습니까? 나는 ctrl + m그것이 매우 편리하다고 생각합니다.

이 두 가지 조합을 사용하도록 설계되었습니까 DIY (define it yourself)? 아니면 또 다른 이야기가 있나요?

답변1

Ctrl+M은 터미널(RET)의 Enter 키와 동일한 문자를 보냅니다. 프로그램은 키를 구별할 수 없으므로 키를 개별적으로 구성할 수 없습니다.

Ctrl+Q가 사용되었습니다.XON기본적으로 Bash는 이를 사용할 수 없지만 tmux는 원시 입력 모드를 사용하므로 tmux와 함께 사용할 수 있습니다.

GUI 프로그램은 수정자 Ctrl을 사용하고 단축키로 Ctrl+m을 사용하여 m 키를 눌러 키보드에서 읽을 수 있지만 쉘이나 터미널 프로그램은 Ctrl+키 조합을 0에서 26까지의 ASCII 문자로 수신합니다.

Ctrl+@ = 0
Ctrl+A = 1
Ctrl+B = 2

등. 이것을 시도하여 값을 볼 수 있습니다

cat ctrlkeys <<EOF
^A^B^C^D^E^F
EOF
od -c ctrlkeys
0000000 001 002 003 004 005 006  \n

값을 입력하려면 Ctrl+[af]를 누르기 전에 Ctrl+v를 눌러 해당 값이 원시 값으로 해석되지 않도록 하세요.

ascii(7) 테이블을 보면 테이블의 제어 코드를 볼 수 있으며 왼쪽에는 해당 문자 @..Z가 있습니다. 예를 들어

015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M

또는

011   9     09    HT  '\t' (horizontal tab)   111   73    49    I

Bash 이전의 제어 코드 해석의 다음 단계는 stty입니다(터미널 설정을 변경하고 인쇄합니다).

stty -a
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;

lnextstartor 및 의 의미는 stty(1)을 참조하세요 stop.

readline(3)도 참조하세요. bash와 기타 GNU cli 프로그램은 이 라이브러리를 사용하여 입력 줄을 제어하고 물론 bash(1) /READLINE(bash 매뉴얼 페이지의 readline 섹션)을 제어하기 때문입니다.

참고: XYZ(NUM)은 섹션 NUM의 매뉴얼 페이지 XYZ를 의미하므로 결과는 입니다 man NUM XYZ.

관련 정보