Terminal為什麼
為什麼ctrl+[
和ESC
都產生^[
?
在 bash 中,我按
ctrl
+v
開始逐字插入。在逐字模式下,我按下Esc
鍵並 bash 顯示^[
. 我將它重定向到 fileesc
。同樣在逐字模式下,我
ctrl
用[
key 按鍵,bash 顯示^[
. 我將它重定向到 filectrl
。接下來,我比較兩個文件,它們是一樣的!
$ 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