键盘映射
Unix有一些特殊的信号,来控制程序的运行,例如intr信号(interrupt,中断)表示终止当前程序。而这些信号通常会被某个快捷键映射,例如Ctrl+C映射到intr信号,因此当我们按下Ctrl+C就可以终止当前程序。
我们可以使用命令stty -a来查看当前终端所有的信号都被映射哪个快捷键了,这些映射通常由于终端的不同而不同,使用命令echo $TERM可以查看当前的终端类型。由于时代发展,现在都用PC机运行终端仿真程序来访问Linux,终端类型要么是xterm,要么是VT100,所以键盘映射也都差不多。例如
[root@centos ~]# stty -a speed 38400 baud; rows 23; columns 166; line = 0; intr = ^C; quit = ^; erase = ^?; kill = ^U; eof = ^D; eol =; eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
tip:由于写快捷键时,写Ctrl很麻烦,所以使用^来代表Ctrl,例如^C代表Ctrl+C,下面我也将采用这种方式
常见的信号含义与快捷键
| 信号 | 描述 | 快捷键 |
|---|---|---|
| intr | 终止当前程序 | ^C |
| erase | 删除光标前一个字符 | backspace |
| werase | 删除光标前一个单词 | ^W |
| kill | 删除光标前所有字符 | ^U |
| stop/start | 暂停/开始屏幕显示,当有大量输出时可以暂停查看 | ^S/^Q |
| eof | 输入结束,可用于告诉shell输入结束,来退出登陆 | ^D |
修改键盘映射
使用命令stty 信号 快捷键即可,例如
stty erase ^H
tip:可以映射到任意键上,例如stty kill K,这样当按下k,将清空输入,非常好玩。
换行字符和返回字符
换行字符对应^J,返回字符对应^M
在Unix中,将键盘键入的数据视为与从文件中读取的数据相同,这一特性称为标准输入,在Unix看来,他们都是输入,没有区别。
在Unix的标准输入中,每行输入都必须以一个^J结束
当我们按下Enter键时,将发送^M,为了满足标准输入,Unix会将键盘输入的 ^M 替换成 ^J
当将文本打印到控制台时,会将^J 替换成 ^M^J
tips:在文本文件中,Unix使用^J作为每行结束,而Windows使用^M^J作为每行结束
重置终端当终端输入出现问题时,可以尝试使用如下命令重置终端
stty sane reset
如果回车键被敲坏了,可以使用^J替代



