關於控制鍵快捷鍵行為的問題
我對
Ctrl-key
組合在終端中的工作方式感到困惑。在 bash 手冊頁中,有多種組合,例如:
C-e
- 走到行尾C-f
- 前進一個字元等等
但是還有一些未記錄的快捷方式,例如:
C-j
(或C-m
)返回鍵。C-h
用於退格C-i
用於標籤等。這些快捷方式只是忘記記錄了嗎?或者,因為
C-j
是LF
C-m
是CR
C-i
是Tab
在 ASCII 中,這是某種“預設”行為嗎?換句話說, , 的行為
C-j
不是C-m
由C-i
bash 實現*的,*而是由其他東西實現的?另一個問題是,當我按下
C-v
左箭頭鍵時,^[[D
螢幕上會出現。即,ESC-[-d
。但是當我按下時ESC-[-d
,游標不會向左移動。這是什麼原因?編輯:
最初,我以為當我按下時
C-j
,鍵盤直接發送00001010
到核心。但後來我決定不是這種情況,因為使用xev
or之類的程序evtest
,我觀察到按鍵Control
和j
顯示為不同的事件。所以當我按下時C-j
,鍵盤不會發送00001010
,但可能是多個字節。那麼這些多個字節的轉換00001010
是在哪裡完成的呢?
C-m
,等的行為由 bash 實現,但它們與,等C-i
相同的事實是由於終端的行為。所有終端的行為都是這樣,因為所有終端一直都是這樣的,這正是應用程序所期望的。終端和應用程序之間的介面基於字元(實際上是字節),而不是鍵,因此不發送可列印字元和鍵組合的鍵必須以某種方式進行編碼。請參閱鍵盤輸入和文本輸出如何工作?有關此主題的更多資訊。另請參閱https://emacs.stackexchange.com/questions/1020/problems-with-keybindings-when-using-terminalReturn``Tab
TAB
是 ASCII 中的製表符,這與ASCII中的 Ctrl+I 字元相同。其他鍵也是如此。Tab
當使用者按下和按下Ctrl
+時,終端都會發送該字元I
。同上RET
(CR) andC-m
, forLFD
andC-j
(大多數鍵盤沒有),and forESC
andC-[
. 還有BackSpace
which 發送C-h
orC-?
,這是它自己的問題。終端的配置(
stty
設置)也可以發揮作用,這會影響bash的一些設置(例如,在 之後stty erase @
,bash 會將按下@
視為退格),但不會C-m
和C-j
送出目前行。
^[[D
是Esc
[
D
,但有資本D
。如果按Esc
[
D
,則 bash 會看到該Left
鍵,因為在termcap或terminfo數據庫中聲明了游標鍵轉義序列。沒有預設綁定Esc
[
d
(它不是普通終端發送的轉義序列)。