Debian

Zsh 鍵綁定的 Tmux Terminfo 問題

  • March 27, 2016

Emacs編輯模式下的zsh自帶了預設的鍵綁定ALT+Backspace刪除游標右側的單詞,ALT+D刪除左側的單詞。我想將後一個函式添加到ALT+DEL中。

我嘗試使用terminfo數據庫為每個$TERM正確的組合鍵設置轉義序列。在man terminfo我讀到關於kDC3成為我可能需要用於ALT+的 Capname 時DEL

我將以下行添加到我的~/.zshrc

bindkey -e `tput kDC3` kill-word

當我通過 SSH ( $TERMis xterm) 直接連接到我的機器時,這很有效。但是當我在 Tmux-session ( $TERMis screen) 中啟動 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樣式序列,這將起作用。


一旦有了綁定,您仍然需要打開tmuxxterm-keys中的選項,以便它為傳遞到其窗格的鍵生成xterm樣式序列。例如在你的:~/.tmux.conf

set-option -wg xterm-keys on

引用自:https://unix.stackexchange.com/questions/57827