zsh 使用两个参数完成 c

zsh 使用两个参数完成 c

对于那些了解 zsh 完成但不知道其所有功能的人来说,背景信息:zsh 的独特且真正有用的功能之一如下:

[/usr/dir1/dir2/dir3/]$ cd dir1 dirnew
/usr/dirnew/dir2/dir3
[/usr/dirnew/dir2/dir3]$ 

即,如果用户可以用另一个目录替换层次结构中的特定目录。这是一个非常方便的功能。(假设 dirnew 确实有 dir2/dir3)。如果 dirnew 没有 dir2/dir3,则此命令将失败。

但是,我不知道如何才能完成 cd,因为目录名很长。当我这样做时cd <TAB>,除了当前目录中的目录之外,还应该显示当前层次结构中的目录。一旦我从层次结构中选择或输入其中一个目录,如果我<TAB>再次按下,我应该从具有类似层次结构的父级目录中获得完成选项。在上面的例子中,假设 /usr/ 有 dirnew 和 diranother beisdes dir1。dirnew 有 dir2/dir3,但 diranother 是空的。 cd dir1 <TAB>应该给我 new 作为选项,但没有 diranother。

答案1

要么你使用的是旧版本的 Zsh,要么你的配置破坏了它。Zsh 的cd补全功能具有该功能,并且能够正常工作。你可以在不使用任何配置的情况下运行 zsh 来验证这一点:

zsh -f # all settings at their default values
autoload compinit && compinit
mkdir -p tmp/a/b
mkdir -p tmp/c/b
mkdir -p tmp/b
cd tmp/a/b
cd a [TAB]

我正在运行 Zsh 5.1,它正确地完成了c。如果我创建第二个可能的完成,例如mkdir -p d/b,它会给我cd

相关内容