使用 zsh tab-completion 时,如果本地文件或目录匹配,则忽略 CDPATH

使用 zsh tab-completion 时,如果本地文件或目录匹配,则忽略 CDPATH

我喜欢 Z shell 的 CDPATH 制表符补全功能,但有时它有点矫枉过正。我希望它仅在本地目录中没有任何内容匹配时才作为后备启动。

例如,我刚刚~/Code/Haxe输入

$ cd h<tab>

知道那里唯一以 an 开头的目录hhaxe.org.我没有完成目录名称,而是h从我的 CDPATH 中得到了一堆以开头的内容。另一方面,我不想没有它,因为(与 AUTO_CD 一起)我只需输入即可到达该目录(或无数其他目录)Haxe。我用这个每时每刻,但我想让它退居二线,切换到本地目录。

我没有找到任何涉及此问题的问题。 这个处理建议完成的显示,但这不是我关心的。当本地目录完美匹配时,我想简单地忽略 CDPATH 中的所有内容。

答案1

没有任何 zstyle 设置。您可以做的是尝试使用空的完成cdpath,如果失败,请尝试使用cdpath

_cd_try_without_cdpath () {
  CDPATH= _cd "$@" || _cd "$@"
}
compdef _cd_try_without_cdpath cd pushd

答案2

~我发现这个问题是因为我的控制台切换到了(位于我的)中的文件夹,CDPATH而不是我当前所在位置的子文件夹。我不确定这是否正是这个问题的目的,但我的解决方案是简单地附加.:CDPATH.那么条目看起来.bashrc像这样:

CDPATH=".:/home/fabian:$drive"

这种方式cd总是优先选择当前文件夹中的任何内容,但如果当前文件夹中没有任何内容,仍然可以切换到其他文件夹。

(另外,我使用的是 Bash 而不是 ZSH,但两者可能相同或相似。)

注意:这会破坏“ cd”(不带参数)作为“”的快捷方式cd ~

相关内容