为什么zsh(oh-my-zsh)完成不存在的目录?

asgeo1

更新3我已经解决了这些烦人的自动完成选项实际上是用户名即它们存在于/etc/passwd我的用户中,例如_kadmin_admin和_kadmin_changepw以及许多其他用户都以下划线开头。这可能特定于OSX。

当找不到其他匹配项时,Oh-my-zsh会自动使用这些用户名进行填充。我尝试将这些用户名添加到中的“不要完成不感兴趣的用户”列表中~/.oh-my-zsh/lib/completion.zsh,但这没有用。我不确定为什么吗?

无论如何,可以阻止oh-my-zsh自动填充用户名吗?


我对ZSH或oh-my-zsh中的某些怪异行为感到沮丧。我不确定是什么原因引起的。

自动完成功能似乎正在搜索一些我不想要的奇怪目录。它们似乎是一些SVN目录,我一无所知,也不知道为什么它们会出现在路径中。(我什至不使用SVN)

仅当当前目录中没有其他匹配项时,才会出现这种现象-然后必须查找我不知道的其他路径。

例子:

注意:我的主目录中没有与之匹配的内容 mi

→  ~  cd mi<tab>
→  ~  cd _kadmin

即它变成mi_kadmin我不知道为什么要匹配该目录。

如果我尝试实际切换到该目录,无论如何都会出现错误(因为它不是完整的目录名):

→  ~  cd _kadmin
cd:cd:10: no such file or directory: _kadmin

如果我一直按,<tab>则它将与完整的目录名称匹配:

→  ~  cd mi<tab><tab><tab>
→  ~  cd kadmin_admin
→  ~_svn
→  ~_svn pwd
/var/empty

我不知道那是怎么回事。我不知道什么是kadmin_admin。以及为什么当我更改为它时,为什么现在我会得到一个目录名称~_svn,然后如果PWD它显示/var/empty

这是我的路:

/Users/asgeo1/.rvm/gems/ruby-1.9.3-p194/bin:/Users/asgeo1/.rvm/gems/ruby-1.9.3-p194@global/bin:/Users/asgeo1/.rvm/rubies/ruby-1.9.3-p194/bin:/Users/asgeo1/.rvm/bin:/usr/local/php54/bin:/Users/asgeo1/Projects/dotfiles/bin:/Applications/Postgres.app/Contents/MacOS/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin

我看不到任何明显的东西。

请有人对此有所说明。我很沮丧!

编辑:似乎以前有人遇到过类似的问题:停止选项卡完成,提示“ messagebus”尽管那里没有答案:(

更新:这是oh-my-zsh应用的cd函数:

→  ~  which cd
cd () {
    if [[ "x$*" = "x..." ]]
    then
            cd ../..
    elif [[ "x$*" = "x...." ]]
    then
            cd ../../..
    elif [[ "x$*" = "x....." ]]
    then
        cd ../../..
    elif [[ "x$*" = "x......" ]]
    then
            cd ../../../..
    else
            builtin cd "$@"
    fi
}
D_Bye

_kadmin可能是该kadmin工具的完整功能-不是目录。如果您尝试对zsh无法作为命令,目录或有效且已知的命令参数完成的内容进行完成,则它将开始提供完成功能作为可能的扩展候选。默认情况下,zsh它带有许多完成程序,您可能不需要许多完成程序-有用于AIX,BSD,Cygwin,各种Linux发行版的捆绑软件,它们都被读取并安装到外壳中。如果您尝试对zsh找不到的内容进行扩展,它会为您提供所有已安装的完成功能。

您可以通过以下方式配置为zsh不提供更完善的功能~/.zshrc

zstyle ':completion:*:functions' ignored-patterns '_*'

重新加载文件,您将不再获得未安装工具的完成功能。zshcompsys有关更多细节,请参见联机帮助页。

编辑 以回复更新3

如果_kadmin实际上是用户帐户,则可以配置zsh为在完成时不提供该帐户看来,方法是列出您确实希望外壳程序考虑的用户帐户,这限制了仅提供给列出名称的用户名。zstyle行是这样的:

zstyle ':completion:*' users asgeo1 root

我认为您可以在users标记后列出任意数量的用户然后,外壳程序将仅提供这些用户的主目录作为该cd功能或内置程序的可能补全。

我不知道为什么将用户名添加到文件中的忽略模式completion.zsh不起作用-进行更改后是否重新加载了配置?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章