zsh自动填充不存在的文件夹

前端之家收集整理的这篇文章主要介绍了zsh自动填充不存在的文件夹前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
刚开始使用带有oh-my-zsh的zsh,我发现用cd自动完成时有点奇怪.

假设我有一个文件夹:

my_folder/
    subfolder/
    another_subfolder/
    file.txt

当我使用bash时,我可以输入:

$cd p<tab>

并且没有任何事情会发生,因为my_folder中的任何内容都不以p开头,但如果我在zsh中执行相同的操作,它会自动填充到单词proxy,我假设它是文件系统中其他位置的某个目录?

我不确定某些内容是否设置错误,或者这是否与自动完成在zsh中的工作方式有关,我不明白.

编辑:

CTRL Xh的输出

tags in context :completion::complete:cd::
    local-directories named-directories      (_alternative _cd (eval)) 
    users named-directories directory-stack  (_tilde _alternative _cd (eval)) 
    users                                    (_users _tilde _alternative _cd (eval))

解决方法

我不确定你是否还在追踪这个问题,但我想帮忙.自从我深入研究zsh的完成系统之后,已经有一段时间了,所以这将是一个很好的借口.

目前,我们将使用此答案作为持续工具,为我提供有用的花絮,以帮助您(和我)解决问题.

正如您所知,zsh的完成系统非常强大.有时,它会完成您不想完成的项目.例如,您几乎总是希望将’cd’命令的参数限制为目录.但是,在zsh中,这些可能是文件系统目录,命名目录,各种路径变量中的目录,甚至是存储在标准shell变量中的目录.所以,我认为第一步是确定完成的“背景”.

请cd进入上面的my_folder目录,然后键入:

cd p<CTRL-X>h

CTRL-Xh是显示当前上下文以完成的默认键组合.请让我知道这个关键组合的输出是什么.例如,我的输出看起来像这样:

tags in context :completion::complete:cd::
    local-directories  (_alternative _cd (eval))

要注意的关键项是“local-directories”.我们在这里看不到的是一个常见的项目’path-directories’,它指的是可以在$cdpath中找到的目录,也可能是其他位置. (我不记得了.)

如果您看到“local-directories”以外的项目,那么这将暗示这个流氓“代理”条目可能来自哪里.例如,如果我尝试从命令行的开头尝试完成而不键入任何内容,则以下是我的zsh设置将尝试完成的项目类型:

commands builtins functions aliases suffix-aliases reserved-words jobs parameters

您可能确实会看到一个或多个带有CTRL-Xh输出的项目,甚至是我上面没有列出的项目. (这只是例子)

这是一种方法,您可以帮助将zsh限制为仅提供本地目录和$cdpath目录作为完成选项:

zstyle ':completion:*:cd:*' tag-order local-directories path-directories

如果你不想要zsh提供的一些适度有用的cd魔法,请从最后删除’path-directories’,我相信你会得到你想要的行为.您需要将其放入.zshrc文件中,以使其在会话中保持不变.如果这有帮助,请告诉我.

猜你在找的Linux相关文章