zsh:`key` -> `terminfo` 字典定义在哪里

zsh:`key` -> `terminfo` 字典定义在哪里

zsh目前正在学习并配置我的~/.zshrc。在 Archwiki 上,我找到了一个更改历史搜索行为的片段:

autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search

[[ -n "$key[Up]"   ]] && bindkey -- "$key[Up]"   up-line-or-beginning-search
[[ -n "$key[Down]" ]] && bindkey -- "$key[Down]" down-line-or-beginning-search

然而,在搜索man页面后,我找不到任何有关该key关键字或它可以采用的参数的文档。grep-ing forman zshall | grep -i "key.*\["不显示任何更多信息,man zshzle的条目也不显示bindkey。最接近的相关匹配如下man zshcontrib

...
source ${ZDOTDIR:-$HOME}/.zkbd/$TERM-$VENDOR-$OSTYPE
[[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char
[[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char
# etc.
...

我在以下位置找到了更多示例维基百科@rayandrews 在 Unix.SE 上的回答,尽管既没有出现也没有声称是 的参数的完整列表key,也没有描述在何处/如何key定义。

我可以在哪里了解更多信息key[...]以及如何使用它?

答案1

在 Debian 上,/etc/zsh/zshrc有:

    typeset -A key
    key=(
        BackSpace  "${terminfo[kbs]}"
        Home       "${terminfo[khome]}"
        End        "${terminfo[kend]}"
        Insert     "${terminfo[kich1]}"
        Delete     "${terminfo[kdch1]}"
        Up         "${terminfo[kcuu1]}"
        Down       "${terminfo[kcud1]}"
        Left       "${terminfo[kcub1]}"
        Right      "${terminfo[kcuf1]}"
        PageUp     "${terminfo[kpp]}"
        PageDown   "${terminfo[knp]}"
    )

它是由那个承诺zshDebian 软件包 5.0.0-1 中。

可能 Archzshrc从 Debian 复制了它。无论如何,这不是上游 zsh 发行版的一部分。

您始终可以使用以下命令查看哈希的定义$key

typeset -p key | sed -n l

或者

printf '%q => %q\n' "${(@kv)key}"

相关内容