Unix快捷键与信号
键盘映射
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 = <undef>; eol2 = <undef>; swtch = <undef>; 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
或^M
替代
如果按Backspace
没有删除字符,而是显示^H
,则可以尝试Ctrl+Backspace