我将 zsh 与“新”完成系统 ( compinit
) 一起使用。有时我想将完成限制为可能的子集,以减少歧义。这是用户选择,而不是配置设置:我想按不同的键而不是Tab获得一组不同的完成。我不想为该命令配置不同的完成。Tab应该仍然做正常的事情。
在某些情况下,有一些解决方法。例如,我有一个绑定到 的键_bash_complete-word
,它在大多数情况下完成文件。但有时我想要一个不太常见的焦点。例如:
- 之后只填写主机名
scp
,而不是本地文件名。 - 之后只完成远程名称
git checkout
,而不是分支名称。
如何绑定将在 之后完成远程名称git checkout
但不是分支名称的密钥?更一般地说,我如何绑定一个键来完成与当前上下文中通常完成的不同的事情?
下面的代码片段使Meta+r在 git 命令行上完成 git 远程名称,并在其他地方完成主机名。
load_helper_functions
. 如果从上面的代码中删除它,它只会git
在当前 zsh 会话中至少执行一次完成的情况下才有效。$words[1]
是要完成的带参数命令的第一个单词。complete -k …
将函数注册_complete-remotes
为完成小部件(允许它运行完成内置)并将其绑定到Meta+ r。