我喜欢 Z shell 的 CDPATH 制表符补全功能,但有时它有点矫枉过正。我希望它仅在本地目录中没有任何内容匹配时才作为后备启动。
例如,我刚刚~/Code/Haxe
输入
$ cd h<tab>
知道那里唯一以 an 开头的目录h
是haxe.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 ~
。