macos - 我的 ZSH 完成在开始时不起作用,但当我获取 .zshrc (Mac) 时它们会起作用

标签 macos autocomplete zsh oh-my-zsh zshrc

标题中有一个简单的总结,但要进一步解释:

每当我打开终端 (iterm2) 时,我都会加载到 zsh,但完成似乎不起作用,然后当我手动运行 source .zshrc 时,它会完全加载。我试过在我的 .zshrc 文件中移动内容以查看加载顺序是否不正确,但没有解决任何问题。

我的 .zshrc 文件:

# ZSH customization
export ZSH="/Users/user/.oh-my-zsh"
source $ZSH/oh-my-zsh.sh
plugins=(git docker asdf zsh-autosuggestions zsh-completions zsh-history-substring-search zsh-syntax-highlighting)
autoload -U compinit && compinit
# color
. "/Users/user/.bin/lscolors.sh" #big color file
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
# alias
alias ip="curl ifconfig.me"
alias ls="gls --color --group-directories-first -hp"
alias ydl="youtube-dl"
alias py="python"
alias code="codium"
# env
export PATH="/usr/local/opt/ncurses/bin:/usr/local/sbin:/usr/local/opt/openssl@1.1/bin:$PATH:/opt/metasploit-framework/bin:$HOME/.bin:$HOME/.cargo/bin"
export EDITOR=/usr/local/bin/codium
export DOTNET_CLI_TELEMETRY_OPTOUT=1
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib -L/usr/local/opt/ncurses/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/ncurses/include"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/ncurses/lib/pkgconfig"
# fzf
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
# inits
test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"
eval "$(starship init zsh)"

如有任何帮助,我们将不胜感激,如果我需要提供更多信息,请告诉我。

最佳答案

您在 .zshrc 文件中犯了两个错误:

  • 如果你做 source $ZSH/oh-my-zsh.sh,那么你不应该也做 autoload -U compinit && compinit,因为前者包括后者。
    • 多次运行 compinit 会导致问题并减慢 shell 的启动速度。每次运行它时,它都会重新初始化完成系统。这将清除在上一个 compinit 运行后以编程方式添加的所有完成条目(而不是从您的 $fpath 自动获取)。
  • plugins=( ... ) 应该在 执行 source $ZSH/oh-my-zsh.sh 之前完成。
    • $plugins 对您的 shell 来说并不特别。相反,它是一个由 OMZ 读取的参数。

因此,将 .zshrc 文件的顶部更改为:

# ZSH customization
export ZSH="/Users/user/.oh-my-zsh"
plugins=(git docker asdf zsh-autosuggestions zsh-completions 
    zsh-history-substring-search zsh-syntax-highlighting)
source $ZSH/oh-my-zsh.sh
# color
[...]

关于macos - 我的 ZSH 完成在开始时不起作用,但当我获取 .zshrc (Mac) 时它们会起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67484598/

相关文章:

python - 安塞 bool + 10.11.6

javascript - JqueryUI 自动完成在 JSFiddle 中工作得很好,但在网站上却不行

zsh - 是否可以在 zsh 中自动分页输出?

javascript - 如何在 Mac 上设置反向代理?

python - OpenCV + OS X + 外部网络摄像头 = 非常慢

python - Py2app:不允许操作

bash - 在终端(Bash)中,你如何自动完成文件名中间的部分匹配?

jquery - 如何在 jquery 中动态自动完成

访问我的主目录时 zsh 权限被拒绝