2011-03-15 526 views
8

我通常會在網絡上發現有趣的zsh鍵綁定設置(通過bindkey命令)。我的問題是如何解釋這些轉義序列映射到的內容?舉例來說,這裏是從oh-my-zshkey-bindings.zsh解釋zsh bindkey轉義序列

bindkey "^[[H" beginning-of-line 
bindkey "^[[1~" beginning-of-line 
bindkey "^[[F" end-of-line 
bindkey "^[[4~" end-of-line 

片段是否有關於如何做這些鍵盤佈局所代表的參考?此外,它是特定於zsh的還是平臺特定的?

我知道我可以使用catCtrl-V來查找某些鍵的相應轉義序列。鑑於我可以蠻力尋找反向匹配,但這不適用於鍵盤上不存在的鍵(例如,Mac /筆記本電腦上的Home/End)。因此,我更喜歡不管物理鍵盤如何確定鍵的方法。

回答

4

如果說到一個典型的unix/linux事件流,圖片大致如下。

終端仿真器程序收到X事件,如某某按鈕按下,另一個按鈕被釋放。例如,這些事件可以使用xev實用程序進行跟蹤。然後終端仿真器將這些事件轉換爲轉義序列

此翻譯不是石頭。它可以配置。不同的終端仿真器配置不同。

XTerm*VT100*Translations:#override \ 
Ctrl<Key>Left:   string(0x1B) string(OD) \n\ 
Ctrl<Key>Right:   string(0x1B) string(OC) \n\ 

注0x1B這是ESC:例如的xterm翻譯可以在.Xdefaults中這樣的設置。 ESC還被打印爲^[

現在,zsh使用zle(並且bash使用readline庫來達到同樣的目的) 它解釋了一些序列在輸入行周圍移動並執行編輯操作。

以下文字應提供更多附加細節。

Zsh Line editor description

Wikipedia article on escape sequences

Xterm Control Sequences

+0

但是,這並不包括可以不X11下運行的其他終端模擬器。 – 2011-03-15 17:10:42

+0

對。這是很多情況。許多終端,許多外殼,許多鍵盤驅動程序等等。所有這些設置都不同。例如,我永遠無法找到在gnome終端中設置翻譯的位置。 – horsh 2011-03-15 18:31:10

+0

謝謝你的解釋。請原諒我的無知,因爲我不確定它是否回答我的問題。我查閱了給定的參考文獻,仍然無法找到如何將轉義序列轉換爲相應的鍵序列(即哪些鍵按下映射到「^ [[H]) – ejel 2011-03-16 17:38:45