理解鍵綁定的問題
我有一個設置和一個 zsh 會話
~ bindkey | grep help "^[H" run-help "^[h" run-help
為什麼當我按“Control + [ + h”時游標下的字會被刪除並且沒有任何反應,但是如果我按“Alt + h”手冊頁正確打開?
^[
實際上意味著轉義字元。在這裡查看:https ://en.wikipedia.org/wiki/ASCII在您的情況下,您的 ALT 鍵似乎是 Escape 鍵的同義詞: https ://en.wikipedia.org/wiki/Alt_key
嘗試立即按
Control
+[
,然後按h
。終端不會將按鍵直接發送到外殼(如
Control
被按下/釋放)。相反,終端根據按下的鍵發送字元序列。序列中的鍵是按順序按下的——嗯——而不是一次全部按下。最大的例外是Control
-keys 和Alt
-keys 與其他鍵同時按下以創建特定序列。正如您已經知道/注意到的那樣,它
^
用作Control
-key 的符號,但它僅與以下字元一起具有此含義。^A
表示Control
+a
或Control
+A
,大寫和小寫字元組合的鍵順序相同Control
(這也是終端經常使用Control
+Shift
+SOMEKEY
作為自己的快捷鍵的原因,而不是與 shell 相關的快捷鍵)。
^[
字面意思是Control
+[
。它也是由Escape
. 所以^[a
意味著Control
+[
後跟a
(小寫!)。此外,Alt
-key 還發送^[
序列,然後是按下它的鍵。所以Alt
+a
也發送^[a
.Alt
++發送.Shift
_a``^[A
因此,對於您的範例,您可以按以下任一鍵(“+”表示“同時”,“,”表示“按順序”):
- 為了
^[h
Alt
+h
Escape
,h
Control
+[
,h
- 為了
^[H
Control
+[
,Shift
+h
Alt
+Shift
+h
Escape
,Shift
+h
特殊鍵,如,
PgUp
或也發送鍵序列。這些通常取決於終端仿真器。您可以使用或小元件來顯示鍵序列。預設情況下,它們綁定到各自的模式。因此,按+後跟有問題的組合鍵將顯示您可以使用的序列。在我的機器上,我得到:Backspace``Return``KP_Enter``quoted-insert``vi-quoted-insert``^V``Control``v``bindkey``termite
PgUp
:^[[5~
, 這也是Control
+[
,[
,5
,~
orEscape
,[
,5
,~
orAlt
+[
,5
,~
Backspace
:^?
, 這也是Control
+?
Return
:^M
, 這也是Control
+m
KP_Enter
:^[OM
, 這也是Control
+[
,Shift
+o
,Shift
+m
或Alt
+Shift
+o
,Shift
+m
理論上,密鑰序列可以任意長且複雜。例如:
bindkey '^[xfooba^r' run-help
Alt
+x
,f
,o
,o
,b
,a
,Control
+r
將執行run-help
小元件。有一點限制,因為
zsh
在它接受多字元序列之前,它只等待另一個字元一段時間。這個超時時間可以在KEYTIMEOUT
參數中配置,單位是百分之一秒。預設值為40
0.4 秒。