Zsh

zsh: key -> terminfo 字典在哪裡定義

  • December 16, 2019

我現在正在學習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 zshzlefor 的條目也不顯示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.
...

我在 zshwiki 找到了更多範例,並在Unix.SE上找到了來自@rayandrews 的答案,儘管它們似乎都不是或聲稱是參數的完整列表key,也沒有描述key定義的位置/方式。

我在哪裡可以了解更多資訊key[...]以及如何使用它?

在 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]}"
   )

它是由Debian 包 5.0.0-1中的那個送出添加的。zsh

可能 Arch 是zshrc從 Debian 複製的。無論如何,這不是上游 zsh 發行版的一部分。

您可以隨時查看$key散列的定義:

typeset -p key | sed -n l

或者

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

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