我一直在按照本指南https://thevaluable.dev/zsh-install-configure-mouseless/来设置我的 autocmp 。我在 MacOS 环境中,但由于某种原因,当我尝试自动完成选项时,它没有列出完整的选项集。这是我的自动完成配置:
#Completion
autoload -Uz compinit
compinit
zmodload zsh/complist
#Amazing article https://thevaluable.dev/zsh-install-configure-mouseless/
zstyle ':completion:*' completer _extensions _complete _approximate
zstyle ':completion:*' menu select
zstyle ':completion:*' file-sort modification
zstyle ':completion:*:*:*:*:descriptions' format '%F{green}-- %d --%f'
zstyle ':completion:*' complete-options true
zstyle ':completion:*' matcher-list 'r:|=*' 'l:|=* r:|=*' #https://unix.stackexchange.com/a/259511
zstyle ':completion:*' verbose yes
zstyle ':completion:*' group-name ''
zstyle ':completion:*' list-colors 'di=34:fi=31:no=33;00'
# zstyle ':completion:*' file-list all #Unfortunetly this messes up colouring
#Move with VIM keys Autocompletion
bindkey '^[[Z' reverse-menu-complete
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history
当我尝试自动完成内置 shell 命令的选项时,我得到以下信息:
❯ cp -
-- option --
-H -- follow symlinks on the command line in recursive mode
-L -- follow all symlinks in recursive mode
-P -- do not follow symlinks in recursive mode (default)
-R -- copy directories recursively
-X -- don\'t copy extended attributes or resource forks
-a -- archive mode, same as -RpP
-f -- force overwriting existing file
-i -- confirm before overwriting existing file
-n -- don\'t overwrite existing file
-p -- preserve timestamps, mode, owner, flags, ACLs, and extended attributes
-v -- show file names as they are copied
我希望获得cp
文章中的完整选项列表。这可能是 MacOs 中 zsh 补全的问题吗?
如果您查看命令的 zsh 补全程序的代码
cp
,您会看到它会根据其运行的操作系统调整选项列表,但它还会检测您是否正在使用 GNU 实现(可以在许多不同的系统上使用,具有可移植性和免费软件的特点),因为不同的操作系统有不同的cp
实现。事实上,macos 自己的选项比
cp
GNU 实现的cp
要少得多。zsh 的
cp
补全器不知道所有不同实现的所有版本的所有选项,cp
但对于给定的操作系统,通常会提供足够的最常用的选项。无论如何,要了解您自己实现的 所支持的选项
cp
,最好阅读其文档¹。¹ 或者它的源代码,供那些提供该选项的人使用,因为某些选项有时没有记录(尽管这通常意味着不鼓励您使用它们)。