zshのコンテキストに基づいて何かを完了しないでください

zshのコンテキストに基づいて何かを完了しないでください

私はzshと「新しい」完成システム(compinit)を使用しています。時々私はあいまいさを減らすために可能性のサブセットに完成を制限したいと思います。これは構成設定ではなく、ユーザーの選択です。Tab別の完成セットを取得するのではなく、別のキーを押したいです。このコマンドに対して他の補完を設定したくありません。Tabそれでも正常なことをする必要があります。

場合によっては回避策があります。たとえば、キーがバインドされており、_bash_complete-wordほとんどの場合、ファイルは完成します。しかし、時にはあまり一般的ではない焦点が必要です。たとえば、

  • scp後ろには、ローカルファイル名ではなくホスト名のみを入力してください。
  • 後ろにはリモート名だけを入力し、git checkout支店名は入力しないでください。

git checkout支店名ではなくリモート名を後に完了するキーをバインドする方法は?より一般的には、現在のコンテキストで通常行われているものとは異なるタスクを実行するためにキーをどのようにバインドするのですか?

答え1

次のコードスニペットを使用すると、Metagitrリモート名はgitコマンドラインから完成し、ホスト名は他の場所で完成します。

_complete-remotes () {
  case $words[1] in
    git) load_helper_functions _git; __git_remotes;;
    *) _hosts;;
  esac
}
compdef -k _complete-remotes complete-word '^[r'
  • バラより他のZSH完了ファイルでヘルパー機能を使用できますか?のためのload_helper_functions。上記のコードからそれを削除すると、git現在のzshセッションで以前に1回以上完了した場合にのみ機能します。
  • $words[1]パラメータで完成するコマンドの最初の単語。
  • complete -k …関数を_complete-remotes完成ウィジェットとして登録し(完成した組み込み関数を実行できるようにする)、Meta+にバインドしますr

関連情報