在空目录中包含以下内容:
$ zsh -d -f -i
% autoload -Uz compinit && compinit
% zstyle ':completion:*:*:cd:*:*' ignored-patterns foo
% mkdir foo
% mkdir bar
% mkdir zsh
Run Code Online (Sandbox Code Playgroud)
cd <TAB>菜单。这很棒。barzshzsh并执行时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
Run Code Online (Sandbox Code Playgroud)
并且打字cd <Tab>仍然完成foo。在这种情况下有没有办法不完成?
zsh补全系统有多种补全功能。这些是通过以下方式启用的:
\nzstyle \':completion:*\' completer <list of completers>\nRun Code Online (Sandbox Code Playgroud)\n该值的默认值为_complete _ignored(请参阅)。
这意味着首先尝试常规完成,如果它没有产生完成,则_ignored尝试特殊完成器。完成_ignored器会忽略ignored-patterns您定义的样式并因此找到foo匹配项。
\n\n样式
\nignored-patterns可以设置为与可能的完成进行比较的模式列表;匹配的被删除。有了这个完成器,这些匹配就可以恢复,就好像没有ignored-patterns设置样式一样。[...]single-ignored如上所述,该样式也可用。
_ignored从完成者列表中删除。
您可以通过 显示当前列表zstyle -L \'*\' completer。\n如果这是空的,它仍然是默认值,您可以_ignored通过以下方式禁用:
zstyle \':completion:*\' completer _complete\nRun Code Online (Sandbox Code Playgroud)\n从文档条目开始single-ignored(在上面的引文中提到):
\n\n\n
_ignored当只有一场比赛时,完成者会使用它。如果其值为 \xe2\x80\x98show\xe2\x80\x99,则将显示单个匹配项,但不会插入。如果值为 \xe2\x80\x98menu\xe2\x80\x99,则单个匹配项和原始字符串都将添加为匹配项,并启动菜单完成,以便轻松选择其中任何一个。
因此,如果您将其设置为show( 或menu) (通过zstyle \':completion:*\' single-ignored show),那么它不会立即完成,只会显示在选项卡完成菜单中。\n这意味着您可以忽略它并继续输入。
(据我所知)不可能仅禁用cd(例如zstyle \':completion:*:*:cd:*:*\' completer ...)的完成器,因为它们是在完成过程的一开始就确定的。
还有一种使用file-patterns样式和^glob 模式忽略某些文件/目录模式的方法,但样式似乎没有与cd完成一起使用。但例如为此ls应该可以解决问题:
zstyle \':completion:*:*:ls:*:*\' file-patterns \'^foo|^**/foo:directories\'\nRun Code Online (Sandbox Code Playgroud)\nzsh 完成指南也是一个很好的资源:\n http://zsh.sourceforge.net/Guide/zshguide06.html
\n| 归档时间: |
|
| 查看次数: |
1178 次 |
| 最近记录: |