仅在安装 oh-my-zsh 后,Pass 自动完成功能才有效

仅在安装 oh-my-zsh 后,Pass 自动完成功能才有效

总结:自动完成功能仅在安装 oh-my-zsh 后才起作用。如果我关闭并重新打开终端,自动完成功能将不再起作用。

我正在运行 MacOS BigSur M1。我正在使用Unix Pass 管理器,与命令一起使用pass。oh-my-zsh 捆绑的自动完成功能似乎无法正常工作。

这是我正在做的事情。

  1. 打开终端(Hyper、iTerm,无论什么;似乎都不重要)。
  2. 安装 Zsh。
  3. 安装 Oh-My-Zsh。
  4. 此时,pass自动完成功能运行正常。因此pass+TAB将列出我的密码选项。
  5. 如果我关闭终端然后再次打开它,自动完成功能将不再起作用。

我可以用 卸载 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。

相关内容