Terminal

為什麼ctrl+[ESC都產生^[

  • October 17, 2022

在 bash 中,我按ctrl+v開始逐字插入。在逐字模式下,我按下Esc鍵並 bash 顯示^[. 我將它重定向到 file esc

同樣在逐字模式下,我ctrl[key 按鍵,bash 顯示^[. 我將它重定向到 file ctrl

接下來,我比較兩個文件,它們是一樣的!

$ echo '^[' > esc
$ echo '^[' > ctrl
$ diff esc ctrl
$

為什麼Ctrl+[Esc產生相同的內容?

^[這裡是C0 和 C1 控制程式碼嗎?如果是這樣,維基文章說^[是 Escape,那麼為什麼ctrl+[也是 Escape?

根本問題是我想檢查並創建一個鍵綁定。

(zsh)$ bindkey -L 
...
bindkey "^['" quote-line
...

所以我需要輸入ESC+'orctrl+[+'嗎?

這看起來遵循與 Ctrl-A 相同的邏輯,或者^A是字元程式碼 1,並^@用於表示 NUL 字節。這裡,^是用另一個鍵表示 Ctrl 的常用方法。

即輸入給foo的字元碼,第 6 位清零,字元碼減 64。所以,是字元碼 65,是字元碼 1;為 64,為 0,NUL;也是91歲,27歲,ESC。只是對於 ESC 你也有一個單獨的鍵,但是你也有 enter 和 tab 鍵,它們也會產生控製字元,所以這並沒有什麼特別之處。Ctrl-*foo*``A``^A``@``^@``[``^[

當然,現代系統上的工作方式可能還取決於其他因素,例如您的鍵映射和鍵綁定的設置方式。也不要問我對於 <64 的字元程式碼是如何工作的,例如. 在我嘗試過的終端上,給出了 NUL 字節。Ctrl-*something*``^1``Ctrl-space

引用自:https://unix.stackexchange.com/questions/721179