📚
PowerShell 7.3以降で CLI ツールのタブ補完が効かなくなったとき
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 以降にアップデートされると解決されるはずです。
また、Cobra のバージョンが低い場合でも、PR の変更のようにタブ補完コードを修正することで解消が確認できました。
AWS CLI のタブ補完の修正
AWS CLI の場合は、いつのまにか AWS 公式ドキュメントでタブ補完コードが修正されていました。
変更内容としては次のようになっていました。
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