最近,我一直在审查 bash 快捷键,并尝试为我的 tmux 激活键找到合适的快捷键。
我觉得很有趣的是ctrl + m
和ctrl + q
没有在 bash 快捷方式中使用,根据https://en.wikipedia.org/wiki/Bash_(Unix_shell)。
为什么它们不被使用?我感觉ctrl + m
还是蛮方便的。
这两种组合是设计用于DIY (define it yourself)
使用的吗?还是另有故事?
答案1
Ctrl+M 发送与终端中的 Enter 键相同的字符(RET)。程序无法区分它们,因此无法单独配置这些键。
Ctrl+Q 已用于XON默认情况下,所以 Bash 不能使用它,但你应该仍然可以在 tmux 中使用它,因为 tmux 使用原始输入模式。
GUI 程序可以从键盘读取,已使用修饰符 Ctrl 按下键 m 并使用 Ctrl+m 作为快捷方式,但 shell 或任何终端程序接收 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;
lnext
请参阅 stty(1) 了解orstart
和的含义stop
。
另请参阅 readline(3),因为 bash 和其他 GNU cli 程序使用该库来控制输入行,当然还有 bash(1) /READLINE(bash 手册页的 readline 部分)。
注意:XYZ(NUM) 表示第 NUM 节中的手册页 XYZ,因此 的结果man NUM XYZ
。