Zsh 鍵綁定的 Tmux Terminfo 問題
Emacs編輯模式下的zsh自帶了預設的鍵綁定
ALT
+Backspace
刪除游標右側的單詞,ALT
+D
刪除左側的單詞。我想將後一個函式添加到ALT
+DEL
中。我嘗試使用
terminfo
數據庫為每個$TERM
正確的組合鍵設置轉義序列。在man terminfo
我讀到關於kDC3
成為我可能需要用於ALT
+的 Capname 時DEL
。我將以下行添加到我的
~/.zshrc
:bindkey -e `tput kDC3` kill-word
當我通過 SSH (
$TERM
isxterm
) 直接連接到我的機器時,這很有效。但是當我在 Tmux-session ($TERM
isscreen
) 中啟動 Zsh 時,我收到以下錯誤消息:tput: unknown terminfo capability 'kDC3'
這真的意味著不可能在 Tmux 中將任何內容綁定到
ALT
+嗎?DEL
還是我只是做錯了什麼?也許kDC3
不是正確的順序?我正在執行 Debian Wheezy Beta 4 x86_64。
第一個問題是您的terminfo條目
screen
沒有定義kDC3
能力;這可能是典型的。您可以將此功能添加到您自己的自定義screen
條目中,也可以“硬編碼”bindkey
命令中的序列。添加這些功能可能會幫助其他程序了解密鑰,但它會分散您的配置(當您手動將配置複製到新機器或使用者帳戶時,很容易忘記這種自定義)。您可以使用以下命令提取適當的條目
infocmp
並建構一個新條目tic
:{ infocmp -xT screen ; infocmp -x1T xterm | grep -E '^\tkDC[3-8]?=' ; } >/tmp/s tic -x /tmp/s
如果您以對您的 terminfo 目錄(例如 )具有寫入權限的使用者身份執行tic
/usr/share/terminfo
,那麼新條目將被放置在那裡(可能會覆蓋原始條目);否則,它將被放置在~/.terminfo
(或 TERMINFO,如果您設置了該環境變數)下。為了完整起見,您可能希望在grep
(UP|DN|RIT|LFT|PRV|NXT|HOM|END|IC|DC)
模式中使用而不是來擷取 Up、Down、Right、Left、PageUp、PageDown、Home、End、Insert 和 Delete 的修改版本。DC
如果您不喜歡自定義 terminfo 條目導致的配置分散,那麼您可以“硬編碼”該值。為了使它更好一點,您可以先檢查
kDC3
:bindkey -e ${$(tput kDC3 2>/dev/null):-'\e[3;3~'} kill-word
要將這種“硬編碼”限制為僅
screen
基於 TERM 值:altdel=$(tput kDC3 2>/dev/null) [[ -z $altdel && $TERM == screen(|-*) ]] && altdel='\e[3;3~' [[ -n $altdel ]] && bindkey -e $altdel kill-word unset altdel
只要您的終端仿真器(堆棧)最終為修改後的密鑰生成xterm樣式序列,這將起作用。
一旦有了綁定,您仍然需要打開tmux
xterm-keys
中的選項,以便它為傳遞到其窗格的鍵生成xterm樣式序列。例如在你的:~/.tmux.conf
set-option -wg xterm-keys on