总结:自动完成功能仅在安装 oh-my-zsh 后才起作用。如果我关闭并重新打开终端,自动完成功能将不再起作用。
我正在运行 MacOS BigSur M1。我正在使用Unix Pass 管理器,与命令一起使用pass
。oh-my-zsh 捆绑的自动完成功能似乎无法正常工作。
这是我正在做的事情。
- 打开终端(Hyper、iTerm,无论什么;似乎都不重要)。
- 安装 Zsh。
- 安装 Oh-My-Zsh。
- 此时,
pass
自动完成功能运行正常。因此pass
+TAB
将列出我的密码选项。 - 如果我关闭终端然后再次打开它,自动完成功能将不再起作用。
我可以用 卸载 oh-my-zsh uninstall_oh_my_zsh
,用 重新安装它sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
,关闭终端,然后重新打开它,pass
自动完成功能就会再次起作用!但是,一旦我关闭该终端窗口,我就会失去自动完成功能。
我甚至不知道如何开始调试它。我不确定这是我的 ZSH 安装的问题,还是与 MacOS 有关?
我原本将此问题发布在 Oh-my-zsh GitHub 存储库的“讨论”选项卡上几周前,但还没有得到任何答案。这个问题看起来可能类似于另一个发布在这里,但没有收到任何答复。
答案1
帖子 zsh 中的自动完成功能(使用 oh-my-zsh)不起作用 #353 以以下摘要结束:
我不会假装对 一无所知
compinit
,但一些实验表明,运行它会破坏已配置的任何自动完成功能。再加上网络上大量建议运行它来“修复”自动完成问题,似乎已导致多个项目将其包含在其自动完成初始化文件中(我使用的两个:nvm 和 sdkman 似乎已经这样做了)——这导致最新加载的配置破坏了它之前的所有配置!
然后,作者在 中添加了以下几行.zshrc
,为他和其他人解决了该问题:
autoload -Uz compinit
compinit -u
# It seems that countless recommendations on the web to run:
# autoload -Uz compinit && compinit
# Have resulted in everyone's zsh autocomplete initialization running that. I have no idea
# what it does, however experimentation has shown that running "compinit" clobbers any
# completions you already had configured. Which totally sucks if you configure auto completion
# for multiple tools in your zshrc
alias compinit="echo no more compinit!"
答案2
我刚刚注意到zsh-completions 文档缺少站点功能文件夹。
在 .zshrc 中的 compinit 行前添加:FPATH=$(brew --prefix)/share/zsh-completions:$(brew --prefix)/share/zsh/site-functions:$FPATH
这对我来说在 M1 Mac 上很有效,当时我遇到了传递完成问题
答案3
我注意到 brew 将 pass 自动完成功能安装在一个奇怪的目录中。因此,我尝试将 _pass 脚本复制到我看到其他脚本正在运行的目录中。
cp /opt/homebrew/share/zsh/site-functions/_pass /opt/homebrew/share/zsh-completions
我不知道为什么,但对我来说它有效。我没有安装 oh-my-zsh。