这是我的完成代码.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 ~
并且它工作了。