📚

PowerShell 7.3以降で CLI ツールのタブ補完が効かなくなったとき

2023/04/11に公開

PowerShell 7.3 以降でタブ補完周りの仕様が変更されており、上手く動作しないという事象がありました。

私の環境では Go で作られた CLI ツールや AWS CLI のタブ補完が効かなくなっていました。

タブ補完が効かなくなった CLI ツール例としては次のようなものがあります。

  • kubectl (Go)
  • yq (Go)
  • AWS CLI

主な解決方法としては、PoweShell 7.2.x 系に戻すか、タブ補完コードを修正する必要があります。
本記事では、タブ補完コードを修正する方法を紹介します。

Go(Cobra)で作られたCLIツールのタブ補完の修正

Go で作られた CLI ツールの場合、Cobraというライブラリを使っている場合が多いので、以下の PR がマージされた 1.7.0 以降にアップデートされると解決されるはずです。

https://github.com/spf13/cobra/pull/1916

また、Cobra のバージョンが低い場合でも、PR の変更のようにタブ補完コードを修正することで解消が確認できました。

AWS CLI のタブ補完の修正

AWS CLI の場合は、いつのまにか AWS 公式ドキュメントでタブ補完コードが修正されていました。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-completion.html#cli-command-completion-windows

変更内容としては次のようになっていました。

Register-ArgumentCompleter -Native -CommandName aws -ScriptBlock {
    param($commandName, $wordToComplete, $cursorPosition)
        $env:COMP_LINE=$wordToComplete
+        if ($env:COMP_LINE.Length -lt $cursorPosition){
+            $env:COMP_LINE=$env:COMP_LINE + " "
+        }
        $env:COMP_POINT=$cursorPosition
        aws_completer.exe | ForEach-Object {
            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
        }
        Remove-Item Env:\COMP_LINE     
        Remove-Item Env:\COMP_POINT  
}   

他の CLI ツールのタブ補完が効かなくなった場合は、これらの修正方法を参考にしてみてください。

Discussion