在一个空目录下,执行以下操作:
$ zsh -d -f -i
% autoload -Uz compinit && compinit
% zstyle ':completion:*:*:cd:*:*' ignored-patterns foo
% mkdir foo
% mkdir bar
% mkdir zsh
- 当我键入
cd <TAB>
时,会出现一个菜单,仅包含bar
和zsh
。这很好。 - 当我移除
zsh
并进行cd <TAB>
时,bar
将被完成而不显示菜单。同样很棒。 - 但是,当我也移除
bar
并进行cd <TAB>
时,foo
会被自动完成。我不希望看到这种情况发生。 - 重新开始,但从父目录开始,并使用
cd <TAB>
来完成父目录,然后再次使用cd <TAB>
,我会看到foo
或者在所有三个情况下都会被自动完成。
有没有办法完全忽略foo
,使它在当前目录和其他任何目录中均不可见,也不会被自动完成?
编辑:
我发现使用zstyle ':completion:*:*:cd:*:*' ignored-patterns '**/foo'
可以解决在父目录中看到被忽略模式的问题,但是当没有其他选择时,被忽略的模式仍然会被自动完成。因此,使用以下代码:
$ zsh -d -f -i
% autoload -Uz compinit && compinit
% zstyle ':completion:*:*:cd:*:*' ignored-patterns '**/foo'
% mkdir foo
在输入 cd <Tab>
后,仍然会完成 foo
。有没有一种方法可以不自动补全呢?