我想知道我的终端为 Ctrl+Backspace 和 Alt+Backspace 发送了什么,执行此操作的标准方法是cat
在终端上运行并输入内容通常可以工作,但是对于像这样的某些输出,结果很棘手。
我猜测 Alt+Backspace 正在发送\x1b\x7f
(即转义退格键),但是如果我运行cat
并键入 Ctrl+V 和 Alt+Backspace,或者只是 Alt+Backspace,会发生什么情况,转义符将被“键入”并且然后立即用退格键将其删除,这样看起来就好像什么也没发生一样。我只有一次通过看到我的计算机渲染了逃生的一帧^[
而得到了线索。
到目前为止,我不确定如何计算出 Ctrl+Backspace 发送的内容。即使两者都在 bash 提示符下删除一个单词,它也不是 Ctrl+W,因为在 bash 提示符下cat
什么都不做,而 Ctrl+W 删除一个单词!
答案1
只需使用这个命令:
showkey -a
答案2
在 中zsh
,与:
$ STTY='raw -echo min 0 time 40' cat -vte
^[^?
或者与bash
:
$ s=$(stty -g); stty raw -echo min 0 time 40; cat -vte; stty "$s"
^[^?
您将看到终端输入原始输入,因为它发送它并且由 呈现cat -vte
。 4 秒(40 分秒)内不输入任何内容即可停止。
例如,您可以替换cat -vte
为od -An -w1 -tu1 -tx1 -to1 -ta
(假设 GNUod
或兼容)以十进制、十六进制、八进制或字符形式查看每个字节值。
27
1b
033
esc
127
7f
177
del
答案3
我在其他地方发现了一个技巧,可以通过使用 来显示 bash 中的单个字符read -rsn1 key && echo "$key" | xxd
。这已经完成了 90%,但我在这个问题上停留了一段时间,因为我只会返回 0x1b(转义),这并不是完整的情况。
然后我将其更改为,read -rsn2 key && echo "$key" | xxd
并且这会扩展到转义序列恰好有多少个字符,一点点实验就可以解决问题。所以在我的终端上我有两个都出于方便原因,Ctrl+ 和 Alt+Backspace 过去映射到 0x1b、0x7f(元退格键,如果您愿意的话)。我首先要走这条路,因为我想配置一个新的终端模拟器,让我删除带有两个组合的单词,但只有其中一个有效。 bash 中的bashread -rsn
是一个很好的工具,可以进行比cat
.