加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

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

发布时间:2021-03-14 18:35:35 所属栏目:Linux 来源:网络整理
导读:刚开始使用带有oh-my-zsh的zsh,我发现用cd自动完成时有点奇怪. 假设我有一个文件夹: my_folder/ subfolder/ another_subfolder/ file.txt 当我使用bash时,我可以输入: $cd ptab 并且没有任何事情会发生,因为my_folder中的任何内容都不以p开头,但如果我在

刚开始使用带有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文件中,以使其在会话中保持不变.如果这有帮助,请告诉我.

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读