我可以在 zsh 中禁止自动完成某个类别吗?

我可以在 zsh 中禁止自动完成某个类别吗?

当我尝试ssh在 中自动完成时zsh,我会看到两种类型的列表。

$ ssh a<TAB>
 -- remote host name --
aur
 -- login name --
avahi

然而,后者对我来说没有用。是否有可能抑制下面的所有内容-- login name --,只留下下面的条目-- remote host name --

使用 rsync 时我也会收到多个条目,尽管标题不同。

$ rsync a<TAB>
 -- user --
avahi
 -- host --
aur

我想禁止-- user --此处的条目。


可能相关的信息

我用zim。另外,以下内容位于~/.zshrc.

h=()
if [[ -r ~/.ssh/config ]]; then
  h=($h ${${${(@M)${(f)"$(cat ~/.ssh/config)"}:#Host *}#Host }:#*[*?]*})
fi
if [[ $#h -gt 0 ]]; then
  zstyle ':completion:*:ssh:*' hosts $h
  zstyle ':completion:*:slogin:*' hosts $h
  zstyle ':completion:*:rsync:*' hosts $h
fi

这是一个解决方法漏洞其中zim制表符补全适用于主机名而不是主机。

答案1

您可以使用以下users样式:

zstyle ':completion:*' users

像这样设置空列表会禁用用户名的补全。如果您愿意,您可以将其范围缩小到单个命令:

zstyle ':completion:*:rsync:*' users

例如,将禁用它rsync但将其保留在其他地方。

zsh补全系统非常精密,配置复杂。手册zshcompsys页涵盖了新的完成方式,如此处所示,并且该zstyle命令记录在zshmodules手册页中。

相关内容