zsh で bash スタイルの自動補完機能を利用する方法 (git コマンド用)

zsh で bash スタイルの自動補完機能を利用する方法 (git コマンド用)

私は切り替えました翻訳そして、それがより良いと思うバッシュ、しかし、私は問題を抱えているオーマイズッシュ(以下「OMZ") オートコンプリート機能。

と入力するとgit chec、OMZはそれをgit check;に補完します。バッシュ完了しますgit checkout。リモートブランチでも問題があります。 、、がori完了します。oriGorigoriginバッシュそれが完成するとorigin/

他の製品でも同じ問題を抱えていますギットのようなコマンドcheckout

問題はエイリアスプラグインによって追加されました。慣れたくないので使用していませんが、自動補完が機能しなくなります。

入手する方法はありますか?バッシュオートコンプリート(bashにはオートコンプリートが組み込まれていないことは知っています)翻訳? または、更新のたびに壊れないように OMZ プラグインをハッキングする方法。

答え1

補完とその提供元は、かなり混乱を招く可能性があります。Ubuntu 14.04 システムを例に挙げます。

$ dpkg -L zsh-common | grep git
/usr/share/zsh/functions/Completion/Debian/_git-buildpackage
/usr/share/zsh/functions/Completion/Unix/_stgit
/usr/share/zsh/functions/Completion/Unix/_git
/usr/share/zsh/functions/Completion/Unix/_topgit
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_get_data_git
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_detect_git
/usr/share/zsh/functions/Misc/run-help-git

このzsh-commonパッケージには git 補完関数が含まれています。一方、このgitパッケージには bash と zsh の補完ファイルも付属しています。

$ dpkg -L git | grep compl
/etc/bash_completion.d
/etc/bash_completion.d/git-prompt
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/git
/usr/share/bash-completion/completions/gitk

次のようなファイルが含まれています

$ head -n 5 /usr/share/bash-completion/completions/gitk
# bash/zsh completion support for core Git.
#
# Copyright (C) 2006,2007 Shawn O. Pearce <[email protected]>
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
# Distributed under the GNU General Public License, version 2.0.

git パッケージは、oh-my-zsh などの高度なアドオンを使用せずに有効にできる git 対応プロンプトも提供します。

要約すると、git サブコマンドの補完はシェル (zsh) から実行できます。

https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_git

gitから

https://github.com/git/git/tree/master/contrib/completion

または oh-my-zsh などのプラグインから。

質問に戻りますが、git checあなたが説明した補完の古い動作は、実際にはバグがあります。はまだあいまいであり、で始まるサブコマンドが複数あるため、chec適切な補完スクリプトは を に補完すべきではありません。 その動作が必要な場合は、以前使用していた多くの補完スクリプトのどれかを確認し、oh-my-zsh git プラグインを無効にして、古い補完スクリプトを引き続き使用してください。checkoutchec

あるいは、エイリアスを設定してそれに慣れることをお勧めします。

git config --global alias.co checkout

git co新しいものを作成するにはgit checkout- oh-my-zsh プラグインはこれらのエイリアスを認識し、次にブランチ名とタグ名を補完します。

関連情報