Zsh

如何將’backward-kill-line’鍵綁定到Ctrl + Shift + Backspace?

  • April 8, 2019

我已經使用zsh kill Ctrl + Backspace, Ctrl + Delete的答案來配置以下鍵綁定:

  • Ctrl+ Backspace:刪除直到目前單詞的開頭,
  • Ctrl+ Delete:刪除直到目前單詞的結尾,
  • Ctrl+ Shift+ Delete: 刪除直到行尾。

這已使用以下命令完成:

$ bindkey -M emacs '^[[3;5~' kill-word
$ bindkey -M emacs '^H' backward-kill-word 
$ bindkey -M emacs '^[[3;6~' kill-line  

要知道如何對密鑰(即^[[3;5~部分)進行編碼,我使用了答案中詳述的“技巧”: type Ctrl++ to see what the value on your system”C Ctrl``Delete

問題

我想將Ctrl++綁定到命令(即刪除游標和行首之間的所有內容)ShiftBackspace``backward-kill-line

但是,當我鍵入Ctrl+ C Ctrl+ Shift+時Backspace,我的提示只顯示- 即與+^H相同的組合鍵。Ctrl``Backspace

您的終端為Ctrl+發送與Shift+相同的轉義序列,因此 zsh 無法區分兩者。唯一的解決方案是配置您的終端以發送不同的轉義序列。並非所有終端都允許這樣做。Backspace``Ctrl``Backspace

一些終端,例如 xterm、rxvt、iTerm2 和 Emacs term,允許您手動為每個鍵弦配置轉義序列。請查閱終端的文件。

例如,對於 xterm,您可以將下面的程式碼段放在您的.Xresources. 載入它xrdb -merge ~/.Xresources。許多環境會在您登錄時載入它;如果您沒有,請將此命令添加到您的 X11 啟動文件中。

XTerm.VT100.translations: #override \
   Ctrl Shift <Key>BackSpace: string("\033[27;6;8~") \n

然後你可以使用這個轉義序列¹:

bindkey -M emacs '^[[27;6;8~' backward-kill-word 

使用基於vte的終端,包括 Gnome-terminal、Guake 和 Terminator,你就不走運了。他們沒有任何方法來配置鍵綁定。不過,他們可能願意為特定密鑰添加臨時支持

¹我選擇這個序列是為了與xterm 的模式兼容。我通常建議啟用,這主要是向後兼容的,但是您想要的特定鍵和弦僅在第 2 級啟用,這很難應付(例如 Ctrl+字母不發送相應的控製字元)。modifyOtherKeysmodifyOtherKeys

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