如何在伺服器中設置 zkbd(zsh 鍵盤綁定)?
我在 Linux 伺服器中有 zsh shell,並從不同電腦中的螢幕會話連接到伺服器。我正在嘗試讓控制鍵(例如 home 和 end)正常工作。
因為 zsh 不使用 GNU Readline 庫,所以我需要將終端序列映射到 zsh 命令。首先,我使用 zkbd 找出每個擊鍵發送的序列,然後將它們映射到正確的命令。這就是我在 .zshrc 中的內容:
autoload zkbd [ ! -f "${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}" ] && zkbd source "${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}" [ -n "${key[Backspace]}" ] && bindkey "${key[Backspace]}" backward-delete-char [ -n "${key[Home]}" ] && bindkey "${key[Home]}" beginning-of-line ...
現在我有兩個問題:
- 通常當我連接到伺服器時,序列號在 $ DISPLAY environment variable gets a new value. Consequently, zkbd gets run, and I have to go through pressing all the control keys. Is it necessary to have the key sequences dependent on $ 展示?
- 當我從螢幕會話連接到伺服器時, $TERM 環境變數將設置為
screen
. 儘管如此,根據我連接的電腦,某些鍵的順序會有所不同(例如 F1 是^[[11~
or 或^[OP
)。我應該如何命名 zkbd 文件以區分不同的映射?
TERM=screen
螢幕程序不是簡單地使用,而是具有一個功能,您可以使用它來設置不同的值TERM
。這假設您已經安裝了一個完整的 ncurses 終端數據庫,並使用與實際終端相對應的TERM
外部螢幕。對於給定的
TERM
,如果終端數據庫中有相應的“screen.$TERM”條目,則 screen 將使用該。ncurses 終端數據庫有幾個,以匹配設置的終端的實際行為TERM=xterm
,例如 screen.Eterm、 screen.gnome、 screen.konsole、 screen.konsole-256color、 screen.linux、 screen.mlterm、 screen.mlterm -256color , screen.mrxvt , screen.putty , screen.putty-256color , screen.rxvt , screen.teraterm , screen.vte , screen.vte-256color, screen.xterm-256color, screen.xterm-new, screen.xterm-r6, screen.xterm-xfree86。一旦你設置好使用終端數據庫,就不需要你自己的特殊/神奇的配置文件了。此外,您將如何告訴伺服器使用哪個文件?真正的資訊在您的客戶端上,在那裡您知道您實際使用的是哪個終端仿真器。
zsh
允許您直接將此資訊與$terminfo
陣列一起使用。進一步閱讀:
- 為什麼不直接使用 TERM 設置為“xterm”?
- 鍵綁定(參見 的討論
$terminfo[]
)