我尝试在 FreeBSD 终端上使用 Linux .bashrc 设置。在 Linux 中,我使用 bashset -o vi
和 键绑定 for Ctr+H
(它调用我的历史文件上的编辑器)。在虚拟机中的 FreeBSD 上(不是通过 ssh 连接时),每当我按退格键时都会调用此键绑定。
它出现在 Linux 终端上,产生退格键^?
(与 不同^H
)。在 FreeBSD 上,退格键生成的键是^H
,它会触发我的键绑定。我很好奇是否有一种方法可以使我的^H
键绑定在两个终端上都工作(即,让 FreeBSD 终端也使用 ^? 表示退格键,而不是 ^H),或者我是否应该使用不同的快捷方式。
我试过了stty -a
。它说... erase = ^?; erase2 = ^H ...
我尝试过stty erase2 ^?
,虽然它确实stty -a
按预期改变了输出,但退格键的行为没有改变并且仍在产生^H
。
答案1
stty
与此无关。这控制着线路纪律。当字符沿着虚拟线路到达内核虚拟终端时,线路规则会对字符做出反应。此时,输入已变成字符,就像真实的终端通过真实的线路发送一样。
将击键映射到内核虚拟终端中的字符的是键盘映射。
% sed -ne '2,4p;/014/p' /usr/share/vt/keymaps/uk.capsctrl.kbd
# alt
# scan cntrl alt alt cntrl lock
# code base shift cntrl shift alt shift cntrl shift state
014 bs bs del del bs bs del del O
%
14 是退格键的 PC/AT 按键代码,该键位于 PC Model M 和 Windows 键盘上的 ISO 9995-1 位置 A13 和 A14。您可以看到它是如何在此键盘映射中映射的。这里要改变什么应该是显而易见的。 ☺
kbdcontrol
您可以使用目标内核虚拟终端设备作为其标准输入来加载键盘映射。文件格式当然记录为 kbdmap(5)。它实际上完全来自 SCO Unix,你可以找到它的文档比 FreeBSD 更好。
进一步阅读
- 键盘. §7. SCO Unix 手册。