タブ補完 (winget)

winget コマンド ライン ツールには、状況依存のタブ補完を提供する complete コマンドが用意されています。 現在のコマンド ラインの状態に応じて、コマンド名、引数名、および引数値の入力補完がサポートされます。

タブ補完の有効化

winget でタブ補完を有効にするには、PowerShell で $PROFILE に次のスクリプトを追加する必要があります。

  1. PowerShell を開き、次のコマンドを入力して、メモ帳で $PROFILE を開きます。notepad.exe $PROFILE

  2. 次のスクリプトをコピーして、メモ帳で開いた $PROFILE ファイルに貼り付けます。

    Register-ArgumentCompleter -Native -CommandName winget -ScriptBlock {
        param($wordToComplete, $commandAst, $cursorPosition)
            [Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding = [System.Text.Utf8Encoding]::new()
            $Local:word = $wordToComplete.Replace('"', '""')
            $Local:ast = $commandAst.ToString().Replace('"', '""')
            winget complete --word="$Local:word" --commandline "$Local:ast" --position $cursorPosition | ForEach-Object {
                [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
            }
    }
    
  3. スクリプトを含む $PROFILE を保存します。 次に、PowerShell を閉じてから再度開きます。 PowerShell を再度開くと、winget のタブ補完が有効になります。

タブ補完の例

タブ () を繰り返し押すと、使用可能な値が循環します。

入力 結果 理由
winget ⇥ winget install install はルートの下の最初のコマンドです
winget sh⇥ winget show show は、sh で始まる最初のコマンドです
winget source l⇥ winget source list list は、ソースの l で始まる最初のサブコマンドです
winget -⇥ winget --version --version はルートに対して定義された最初の引数です
winget install power⇥ winget install "Power Toys" "Power Toys" は、ID、名前、または Moniker の先頭が power の最初のパッケージです。
winget install "Power Toys" --version ⇥ winget install "Power Toys" --version 0.19.2 0.19.2 は、執筆時点での Power Toys の最高バージョンです

コマンド リファレンス

complete コマンドは、3 つの必須引数を取ります。

引数 説明
--word 補完中の現在の単語。カーソルが配置されているトークン。 空にしてカーソルに現在の値がないことを示すことができますが、指定されている場合は、コマンド ラインに部分文字列として表示する必要があります。
--commandline winget を含む、現在のコマンド ライン全体。 上の例を参照してください。この引数には、タブ文字 () 以外のすべてを指定する必要があります。
--position コマンド ライン内のカーソルの現在位置。 コマンド ライン文字列の長さより大きくして、末尾にあることを示すことができます。

単語の値を指定すると、補完は置換モードで動作します。 指定された単語値で始まる、この場所に正しく収まる入力候補が提案されます。

単語の値が指定されていない場合 (単語に空の値が指定されている場合、例: --word=)、補完は挿入モードで動作します。 カーソルの位置に新しい値として収まる入力候補が提案されます。

引数に基づいて、提案される補完は次のいずれかになります。

  1. サブ コマンド :: カーソルがコマンドの直後にあり、使用可能なサブ コマンドがある。
  2. 引数指定子 :: カーソルの位置が値を受け取る引数指定子の後ではなく、使用可能な引数がある。
  3. 引数値 :: カーソルが値を受け取る引数指定子の後にあるか、位置指定引数が予測される。

これらのすべてのケースが評価された後、潜在的な入力候補が 1 行に 1 つずつ出力されます。 入力候補文字列にスペースが含まれている場合は、引用符で囲まれます。