![Zsh 的标准补全工作正常,那么为什么人们建议加载 compinit 模块呢?](https://linux22.com/image/84490/Zsh%20%E7%9A%84%E6%A0%87%E5%87%86%E8%A1%A5%E5%85%A8%E5%B7%A5%E4%BD%9C%E6%AD%A3%E5%B8%B8%EF%BC%8C%E9%82%A3%E4%B9%88%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BA%BA%E4%BB%AC%E5%BB%BA%E8%AE%AE%E5%8A%A0%E8%BD%BD%20compinit%20%E6%A8%A1%E5%9D%97%E5%91%A2%EF%BC%9F.png)
如果我将这些行放在我的行中,而没有其他任何内容,~/.zshrc
我将获得我期望的所有完成功能。
# For autocompletion with an arrow-key driven interface
zstyle ':completion:*' menu select
# report what kind of completion zsh doing
zstyle ':completion:*' format 'Completing %d'
# show ls style colours on file completions
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
# report position when autocompleting lists bigger than available screen
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s%p
那么为什么人们建议你加载compinit
?,即
autoload -Uz compinit
compinit
# completion config directives go here
我的测试表明它并没有改善 zsh 的完成,也没有修复已损坏但在 bash 中可以工作的 zsh 完成(即curl)。
答案1
完成系统激活compinit
做完善基础。基本系统在很大程度上不知道上下文,并且几乎在所有地方都只完成文件名。由 激活的“新”补全系统compinit
知道,当参数以 开头时-
,它应该补全许多命令的选项,它应该补全命令$PATH
(甚至在 root 的 PATH 中)而不是之后的文件名sudo
,它应该补全主机名之后ssh
, ETC。
我不知道你为什么说curl的完成是“坏的”。也许是因为没有安装?旧版本的 zsh 具有curl 的补全功能,但较新的版本依赖于curl 发行版中包含的补全脚本。检查您的curl 安装是否包含或_curl
下的某个位置(某些发行版缺少此文件)。/usr/local/share/zsh/functions
/usr/share/zsh/functions