エイリアスは次git
のように定義されています。
alias g=git
これと私のzshと抗原setupg
と同じオートコンプリート機能を使用してくださいgit
。
g
しかし、デフォルトではgitの状態を表示する関数に置き換えると
g() {
if [ "$#" -eq 0 ]; then
git status --short --branch
else
git "$@"
fi
}
当然、これはもう機能しません。git-all
サブディレクトリのすべてのリポジトリで同じgitコマンドを実行する関数にも同じことが当てはまります。
git-all() {
if [ "$#" -eq 0 ]; then
find . -maxdepth 3 -type d -name .git -execdir echo \; -execdir pwd \; -execdir git status --short --branch \;
else
find . -maxdepth 3 -type d -name .git -execdir echo \; -execdir pwd \; -execdir git "$@" \;
fi
}
alias ga='git-all'
私はこれらすべてをしたいですg
。git-all
ga
git
これ文書説明する
1つのコマンド(たとえばcmd1)にすでに定義されているコンプリートを持つ他のコマンド(たとえばcmd2)と同じコンプリートを適用するには、次のようにします。
compdef cmd1=cmd2
だから私は打者を打つ。
compdef git-all=git
現在のzsh
セッションで動作します!いいね
.zshrc
したがって、私は抗原設定(初期化する必要がありますzsh-users/zsh-completions
)の後に、エイリアスと関数定義の後にcompdefを入れます。
if [ -f ~/.antigenrc ]; then
source ~/.antigenrc
fi
if [ -f ~/.sh_aliases ]; then
source ~/.sh_aliases
fi
compdef g=git
compdef ga=git
compdef git-all=git
antigen apply
私の抗原は次のとおりです
source /usr/share/zsh-antigen/antigen.zsh
antigen use oh-my-zsh
antigen bundle gradle/gradle-completion
antigen bundle command-not-found
antigen bundle MikeDacre/cdbk
antigen bundle zsh-users/zsh-completions
antigen bundle zsh-users/zsh-syntax-highlighting
antigen theme ys
次に、新しいzshシェルを起動します。今仕事を終えることはうまくいきません。
どうすればいいですか?インタラクティブzshシェルは.zshrcを読み取ります(ここに.zshrcを入れるとecho
出力が表示されます)。抗原設定の前に compdef を置くと、compdef が定義されていないというエラーが発生しますが、最後に存在するとエラーは表示されず、機能しません。たぶん抗原が何か変なことをしているかもしれないが、それでも抗原が設定された後に完成が定義されるので、抗原がこれを台無しにしてはならないのではないだろうか?
_git 2>/dev/null
また、提案したように.zshrcに追加してみました。ここ、またはcompdef '_dispatch git git' g
推奨されるようにここ、役に立たない。
私のzshバージョンは5.8です。
ベストアンサー1
私はついにそれを見つけた。抗原があるバグのようです。まだ一つあります。質問Antigen Githubには回避策が含まれています。
私のために解決したのは、.antigen/init.zshで次の行をコメントアウトすることでした:
# autoload -Uz add-zsh-hook; add-zsh-hook precmd _antigen_compinit # compdef () {}
これは問題を解決する正しい方法ではなく、他のエラーが発生する可能性があることを知っていますが、kubectlを大量に使用するため、オートコンプリートが必須です。
この関数はcompdef () {}
明らかに何もせず、私のものです.zshrc
。引用された解決策は抗原で(再)生成されたので私には効果的ではありませんでしたが、私に効果があったのは私の.antigen/init.zsh
前に置くことでした。autoload -U +X compinit && compinit
compdef
.zshrc
#type compdef #uncomment this to see the problem
autoload -U +X compinit && compinit
#type compdef #uncomment this to see the solution
compdef g=git
compdef ga=git
compdef git-all=git