更新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
}
答案1
_kadmin
可能是该工具的完整功能kadmin
- 而不是目录。如果您尝试对zsh
无法找到的命令、目录或有效且已知的命令参数补全进行补全,则它会开始提供补全函数作为可能的扩展候选者。默认情况下,zsh
带有许多完成器,其中许多您可能不需要 - 有 AIX、BSD、Cygwin、各种 Linux 发行版等的捆绑包,它们都会被读取并安装到 shell 中。如果您尝试扩展zsh
找不到的内容,它可以为您提供所有已安装的完成功能。
您可以zsh
通过将其放入以下文件中来配置不提供更完整的功能~/.zshrc
:
zstyle ':completion:*:functions' ignored-patterns '_*'
重新加载该文件,您将不再获得尚未安装的工具的补全功能。查看zshcompsys
联机帮助页以获取(很多)更多详细信息。
编辑 回复更新3
如果_kadmin
实际上是一个用户帐户,您可以配置zsh
为不在完成中提供它。似乎该方法是列出您确实希望 shell 考虑的用户帐户,这限制了仅向列出的用户提供的任何名称。该zstyle
行是这样的:
zstyle ':completion:*' users asgeo1 root
我认为您可以在标签后列出任意数量的用户users
。然后,shell 将仅提供这些用户的主目录作为cd
函数或内置函数的可能补全。
我不知道为什么将用户名添加到文件中的忽略模式completion.zsh
不起作用 - 您在进行更改后重新加载配置吗?