bash 단축키에 Ctrl + m 및 Ctrl + q가 사용되지 않는 이유는 무엇입니까? tmux 활성화 키에 적합한 키를 찾으려고 노력했습니다. 나는

최근에 bash 바로 가기 키를 검토하고 내 tmux 활성화 키에 적합한 키를 찾으려고 노력했습니다.

나는 것을 흥미 ctrl + mctrl + q에 따라, bash는 바로 가기에서 사용되지 않는다 ) https://en.wikipedia.org/wiki/Bash_(Unix_shell .

왜 사용되지 않습니까? ctrl + m꽤 편리 하다고 생각 합니다.

이 두 가지 조합은 DIY (define it yourself)사용 목적으로 설계 되었습니까? 아니면 또 다른 이야기가 있습니까?



답변

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

Ctrl + Q는 기본적으로 XON 에 이미 사용 되므로 Bash에서는 사용할 수 없지만 tmux는 원시 입력 모드를 사용하므로 여전히 tmux에서 사용할 수 있습니다.

GUI 프로그램은 키보드에서 읽을 수 있습니다. 키 m은 수정 자 Ctrl을 사용하여 눌렀으며 Ctrl + m을 단축키로 사용하지만 쉘 또는 모든 터미널 프로그램은 0에서 26까지의 ASCII 문자처럼 Ctrl + Key 조합을받습니다.

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;

lnextor start및 의 의미에 대해서는 stty (1)를 참조하십시오 stop.

또한 bash 및 기타 GNU cli 프로그램은 해당 라이브러리를 사용하여 입력 라인을 제어하고 bash 매뉴얼 페이지의 readline 섹션 인 bash (1) / READLINE을 참조하십시오.

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