如何在服务器中设置 zkbd(zsh 键盘绑定)?

如何在服务器中设置 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
...

现在我有两个问题:

  1. 通常当我连接到服务器时, $DISPLAY 环境变量中的序列号会获得新值。因此,zkbd 开始运行,我必须按下所有控制键。按键序列是否有必要依赖于 $DISPLAY?
  2. 当我从屏幕会话连接到服务器时, $TERM 环境变量将设置为screen.不过,根据我连接的计算机的不同,某些键的顺序会有所不同(例如,F1 是^[[11~^[OP)。我应该如何命名 zkbd 文件以便区分不同的映射?

答案1

TERM=screen屏幕程序有一个功能,您可以使用它来设置,而不是简单地使用。不同的的值TERM。这假设您已经安装了完整的 ncurses 终端数据库,并使用TERM 外部与实际终端对应的屏幕。

对于给定的TERM,如果终端数据库中有相应的“screen.$TERM”条目,则 screen 将使用。 ncurses 终端数据库有几个这样的,以匹配设置的终端的实际行为TERM=xterm,例如, 屏幕.Eterm, 屏幕侏儒, 屏幕控制台, screen.konsole-256color, 屏幕.linux, 筛选.mlterm, screen.mlterm-256color, 屏幕.mrxvt, 屏幕腻子, screen.putty-256color, 屏幕.rxvt, 屏幕.teraterm, 屏幕.vte, 屏幕.vte-256color, screen.xterm-256color, screen.xterm-新, screen.xterm-r6, screen.xterm-xfree86

一旦您设置好使用终端数据库的内容,就不需要您自己的特殊/神奇的配置文件。此外,您如何告诉服务器使用哪个文件?真实的信息在您的客户上,您可以在其中知道您实际使用的是哪个终端模拟器。

zsh让您可以直接在数组中使用此信息$terminfo

进一步阅读:

相关内容