zsh cdpath 和自动完成

zsh cdpath 和自动完成

我在 zsh 中的 CDPATH 如下所示:

export CDPATH='.:..:../..'

不幸的是,这意味着当我在输入“cd ”后尝试自动完成时,会出现太多不相关的自动完成选项,具体取决于我所在的位置。例如,如果我在主目录中,输入 cd 会尝试自动完成系统上的每个用户,因为 CDPATH 有“..”

有没有办法让我的 CDPATH 保持如上所示,但让 cd、pushd 等的自动完成功能忽略 CDPATH 值,并且仅基于当前目录自动完成?

答案1

path-directories

一种方法是在您的建议源中添加以下完成设置以将其从建议源中.zshrc删除。path-directories

zstyle ':completion:*:complete:(cd|pushd):*' tag-order \
    'local-directories named-directories'

组名

另外或另外,以下设置应显示所有相应的完成建议组的标题,以便您可以看到哪些目录是本地目录以及哪些目录是来自您的建议cdpath

zstyle ':completion:*' group-name ''
zstyle ':completion:*:descriptions' format %d

您可以将标准提示格式应用于这些描述,以使它们脱颖而出:

zstyle ':completion:*:descriptions' format %B%d%b        # bold
# zstyle ':completion:*:descriptions' format %S%d%s        # invert/standout
# zstyle ':completion:*:descriptions' format %U%d%u        # underline
# zstyle ':completion:*:descriptions' format %F{green}%d%f # green foreground
# zstyle ':completion:*:descriptions' format %K{blue}%d%k  # blue background
# etc.

根据我的经验,这有助于理解不同的来源。


注 1:zsh有两种数组变量表示形式,如PATHCDPATH,其中小写形式是实际数组。这意味着您可以:

cdpath=(path/to/dir /path/to/another/dir)

或者,为了获得您想要的结果:

cdpath=(.. ../..)

我个人发现它比冒号分隔的伪数组更具可读性。

笔记2CDPATH除非您有多个程序需要设置导出,否则无需导出。

相关内容