git bare 存储库的 Zsh 自动补全

git bare 存储库的 Zsh 自动补全

这是我的完成代码.zshrc

autoload -U compinit
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
zstyle ':completion:*' menu select
zmodload zsh/complist
compinit
_comp_options+=(globdots)       # Include hidden files.

当我使用别名时,自动完成功能一直存在问题: config='/usr/bin/git --git-dir=$HOME/.local/share/dotfiles --work-tree=$HOME'

这个问题之前已经讨论和解释过(请检查他们,他们比我更好地解释了这个问题)这里这里_git,尽管已经讨论过,但我提到这一点的唯一原因是因为没有一个解决方案有效,并且因为完成脚本中有这些以前不存在的更改:

        (( $+opt_args[--git-dir] )) && local -x GIT_DIR=${(Q)${~opt_args[--git-dir]}}
        (( $+opt_args[--work-tree] )) && local -x GIT_WORK_TREE=${(Q)${~opt_args[--work-tree]}}

这些行创建了别名函数,但在一种情况下,只有当别名像我上面发布的那样编写时,它才不起作用,但是如果用它$HOME替换变量,~它就可以完美地工作,因为它应该是唯一的问题是,如果我确实进行了替换别名将不再起作用并给出以下错误:fatal: not a git repository: '~/.local/share/dotfiles'

答案1

经过一番调查后,我发现这是变量扩展的问题$HOME,但解决方案建议这里工作完美,我刚刚替换--work-tree=$HOME--work-tree ~并且它工作了。

相关内容