我可以使用类似vi的hjkl键浏览zsh的制表符完成菜单吗?


13

我使用zsh的基于菜单的制表符完成。我按Tab一下,然后出现可能的完成清单。如果Tab再次按,则可以使用箭头键浏览此列表。然而,是否有可能与浏览他们viHJKL钥匙呢?

我在命令行输入中使用emacs模式,bindkey -e在中~/.zshrc。我还将zim与zsh一起使用。如果相关,则指定制表符补全系统的命令在此处

Answers:


16

是的,您可以通过启用menu select

zstyle ':completion:*' menu select
zmodload zsh/complist
...
# use the vi navigation keys in menu completion
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history

+1这个效果很好,如果我手动运行bindkey在终端的命令,但是如果我把他们在结束失败~/.zshrc,有/home/sparhawk/.zshrc:bindkey:186: no such keymap `menuselect'
Sparhawk

您启用了完成脚本吗?在省略号之前查看命令...
jasonwryan

你是说zstyle线吗?是的,我也有~/.zshrc
Sparhawk

您还必须启用它。以我的.zshrc为例
jasonwryan '16

添加autoload -Uz compinitcompinit都行不通,但是我不确定是否启用它是有问题的,因为(a)菜单选择在一般意义上可以正常工作,并且始终可以,并且(b)我可以bindkey稍后手动运行这些行,作品。另外,我才意识到(b)只如果我按tab工作第一,大概是为了初始化完成系统,然后运行bindkey…。否则,将失败,如上(bindkey: no such keymap `menuselect')所示。
Sparhawk

4

我最接近的是使用CTRL- NCTRL- P在可能的补全列表中前后移动,而不是TabShift- Tab。这更多vi样的导航。

在配置.zsh文件中,我可以通过以下方式实现此目的:

bindkey '^n' expand-or-complete
bindkey '^p' reverse-menu-complete

并且相关地:

bindkey '^k' up-history
bindkey '^j' down-history
bindkey '^h' backward-delete-char
bindkey '^w' backward-kill-word
bindkey '^r' history-incremental-search-backward

这是绑定的文档。


2
太好了,谢谢。也-M menuselect可以在bindkey此处添加到命令以限制模式。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.