Zsh

如何在伺服器中設置 zkbd(zsh 鍵盤綁定)?

  • August 17, 2016

我在 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
...

現在我有兩個問題:

  1. 通常當我連接到伺服器時,序列號在 $ 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 $ 展示?
  2. 當我從螢幕會話連接到伺服器時, $TERM 環境變數將設置為screen. 儘管如此,根據我連接的電腦,某些鍵的順序會有所不同(例如 F1 是^[[11~or 或^[OP)。我應該如何命名 zkbd 文件以區分不同的映射?

TERM=screen螢幕程序不是簡單地使用,而是具有一個功能,您可以使用它來設置不同的值TERM。這假設您已經安裝了一個完整的 ncurses 終端數據庫,並使用與實際終端相對應的TERM 外部螢幕。

對於給定的TERM,如果終端數據庫中有相應的“screen.$TERM”條目,則 screen 將使用。ncurses 終端數據庫有幾個,以匹配設置的終端的實際行為TERM=xterm,例如 screen.Etermscreen.gnomescreen.konsolescreen.konsole-256colorscreen.linuxscreen.mltermscreen.mlterm -256color , screen.mrxvt , screen.putty , screen.putty-256color , screen.rxvt , screen.teraterm , screen.vte , screen.vte-256colorscreen.xterm-256colorscreen.xterm-newscreen.xterm-r6screen.xterm-xfree86

一旦你設置好使用終端數據庫,就不需要你自己的特殊/神奇的配置文件了。此外,您將如何告訴伺服器使用哪個文件?真正的資訊在您的客戶端上,在那裡您知道您實際使用的是哪個終端仿真器。

zsh允許您直接將此資訊與$terminfo陣列一起使用。

進一步閱讀:

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