我在 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
有两种数组变量表示形式,如PATH
和CDPATH
,其中小写形式是实际数组。这意味着您可以:
cdpath=(path/to/dir /path/to/another/dir)
或者,为了获得您想要的结果:
cdpath=(.. ../..)
我个人发现它比冒号分隔的伪数组更具可读性。
笔记2:CDPATH
除非您有多个程序需要设置导出,否则无需导出。