获取zsh不完成用户

获取zsh不完成用户

我有一个目录,其中有一个名为 的子目录src。我希望在输入cd s并点击TAB目录时能够完成。相反,zsh尝试完成系统上以以下开头的所有用户s

Completing local directory
src/
Completing user
saeumair  sbrg      scan-nix  schlosse  sdwoods   shutdown   
sis-user  smmsp     snitch    srabhina  sshd      sterpeni  sushid    sync 

我猜我的罪过.zshrc是:

zstyle ':completion:*:directory-stack' list-colors '=(#b) \
        #([0-9]#)*( *)==95=38;5;12'

我用它来完成cd历史记录。知道如何在不为用户完成的情况下保留此功能吗?

答案1

cdablevars选项负责创建命名目录,因此用户成为 cd 的有效参数。如果您不使用它,请使用unsetopt cdablevars.

要更改 cd 的完成内容,可以使用样式tag-order。例如,要首先尝试仅本地目录,则为:

    zstyle ':completion:*:cd:*' tag-order local-directories

在特定上下文中查看适用标签的一个方便的快捷键是按Ctrl-X h而不是按tab

答案2

用户是命令的有效参数cd,因此作为完成提供,因为您可以选择cdable_vars打开。使用此选项,cd foo可以使用 代替cd ~foo,它允许foo是任何可以波形符扩展,包括设置的用户名或目录名hash -d(但不包括 shell 变量,尽管有选项的名称)。

完成代码中没有选项允许指定目录但不尝试完成它们。您可以使用 的完成函数的包装器来解决这个问题cd

unset -f _cd
autoload -U _cd
functions[_cd_orig]=_cd
_cd () {
  setopt local_options no_cdable_vars
  _cd_orig $@[@]
}

相关内容