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 ~

関連情報