shell 加载`zsh时出现zsh-completions错误:compinit:找不到函数定义文件`

8fsztsew  于 2023-04-07  发布在  Shell
关注(0)|答案(4)|浏览(379)

在尝试从oh-my-zsh移回更轻的zsh配置后,我安装了zsh-completions插件,通过自制软件安装时需要具有以下内容:

if type brew &>/dev/null; then
    fpath=${HOMEBREW_PREFIX}/share/zsh-completions:$fpath

    autoload -Uz compinit
    compinit
fi

问题是它不能正常工作,因为它找不到compinit,我得到了下一个错误:

zsh: compinit: function definition file not found
zzwlnbp8

zzwlnbp81#

在看到使用echo $fpath设置的值后,我意识到自制软件警告建议有错误的代码,它不包括compinit函数所在的文件夹。
修复很容易,只需替换:

fpath=${HOMEBREW_PREFIX}/share/zsh-completions:$fpath

export fpath=(${HOMEBREW_PREFIX}/share/zsh-completions $fpath)

解决了这个问题。

uujelgoq

uujelgoq2#

也许是Lmod导致了这个问题。请参阅这篇文章:Lmod FAQ

**如果我的启动shell是bash或tcsh,我启动zsh,为什么我会收到这样的消息:“/etc/zsh/zshrc:48:compinit:function definition file not found”**Lmod同时支持zsh和ksh。这两种shell都使用shell var. FPATH,但使用方式非常不同。问题是一些bash或tcsh用户运行ksh脚本,需要访问module命令。在K-shell中,导出env. var. FPATH,它是找到模块 shell 函数的路径。Z-shell也使用FPATH来指向compinit等工具。通过导出FPATH,Z-shell不会更改FPATH的值,这意味着zsh用户无法找到使其工作的所有函数。解决方案是在启动文件中的“exec zsh”之前添加“unset FPATH”。

在我的例子中,我必须卸载Lmod以确保直接ssh和VSCode终端都正确运行zsh完成。

wwtsj6pe

wwtsj6pe3#

在我的例子中,更新macOS后:

ProductName:        macOS
ProductVersion:     13.3
BuildVersion:       22E252

zsh的问题:

/Users/myuser/.zshrc:13: compinit: function definition file not found

错误.zshrc

fpath=(~/.zsh/completion /usr/local/share/zsh/site-functions /usr/share/zsh/site-functions /usr/share/zsh/5.8.1/functions)

因为名为5.8.1的目录不存在,并且未加载完成。

解决方案

  • 需要更改目录名称以更正
  • compinit添加自动加载
    正确.zshrs
fpath=(~/.zsh/completion /usr/local/share/zsh/site-functions /usr/share/zsh/site-functions /usr/share/zsh/5.9/functions)

autoload -Uz compinit && compinit
9rnv2umw

9rnv2umw4#

对我来说,这是特权,修复它们后,它工作得很好。

sudo chmod a+x /usr/local/lib/zsh
sudo chmod a+r /usr/local/lib/zsh
sudo chmod a+r /usr/local/lib/zsh/5.9
sudo chmod a+r /usr/local/lib/zsh/5.9/zsh
sudo chmod a+x /usr/local/lib/zsh/5.9
sudo chmod a+x /usr/local/share/zsh
sudo chmod a+r /usr/local/share/zsh
sudo chmod a+xr /usr/local/share/zsh/5.9

相关问题