我想知道我的終端為 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
.