2019年6月26日 星期三

Unix中键映射的显示与修改

1. 键映射的显示:stty -a
到现在,我们已经介绍了很多键盘信号,每个键盘信号都对应于键盘上的一些键。这些键盘信号如下表,都是最常见的键映射,但是它们是不固定的。
信号
作用
erase
<Backspace>/<Delete>
删除键入的最后一个字符
werase
^W
删除键入的最后一个单词
kill
^X/^U
删除整行
intr
^C
停止正在运行的程序
quit
^\
停止程序并保存core文件
stop
^S
暂停屏幕显示
start
^Q
重新启动屏幕显示
eof
^D
指示已经没有数据

如果需要显示Unix中键盘映射时,使用下述命令:

stty -a

stty是“set terminal(设置终端)“命令,-a意味着“显示所有的设置”。
stty命令显示了若干行关于终端的信息。我们感兴趣的是那些显示键盘信号即它们所映射的键的信息行。下面是一个Linux系统的例子:

2. 键映射的修改:stty
如果希望修改键映射,可以使用stty命令。只需键入stty,后面跟着信号的名称,然后是新的键赋值即可。例如将kill键修改为^U的命令如下:

stty kill ^U

重点在于:一定要确保以两个单独的字符的形式键入<Ctrl>键组合,而不是一个真正的<Ctrl>组合键。stty将会指出其中一个字符代表<Ctrl>键。例如,在这个例子中,应该键入^(插入记号)字符,后面跟一个U字符,而不应该键入<Ctrl-U>。
当在stty命令中使用带<Ctrl>的字符名时,不必键入大写字母。例如,下述两条命令都能正常工作:

stty kill ^u
stty kill ^U

只需记住,要键入两个单独的字符。
严格的讲,可以将任何键映射到一个信号上。例如,可以将字母K映射到kill信号上。洗面两条命令都可以完成上述工作:

stty kill k
stty kill K

当然,这样的映射只会导致问题,每次按下<K>键时,Unix都将删除那一行字符!
通常在映射中只使用<Ctrl>键组合。实际上,在几乎全部情况中,最好是保持事情原来的方式,坚持标准的赋值键。
但是,还有一种情况,在这种情况中,您可能希望进行修改。假设您经常通过网络连接一台远程主机,在这台主机上,erase键是^?。但是,您的Backspace键发送^H。为了使操作更加方便,需要将^H映射到erase。这就允许您在按下<Backspace>键时删除一个字符。

stty erase ^H

下面举一个相反的例子。您连接到一台主机,这台主机将^H映射到erase。但是,您的<Backspace>(或者<Delete>键)发送^?信号。这是,使用stty修改映射的命令如下所示:

stty erase ^?

记住,表示法^?并不是指一个实际的<Ctrl>键组合。^?只是一个两字符的缩写,代表“which key on your keyboard sends the DEL code(键盘上用来发送DEL代码的任意键)“。
如果决定查看键盘的映射,可以使用前面描述的命令进行查看:

stty -a

另外,还可以只输入stty命令本身:

stty

这将显示一个简短报告,仅显示那些默认值已经改变的映射。

沒有留言:

張貼留言