Windows PowerShell (この記事の執筆時点でバージョンは5.1) でTabキーを押したときの補完方法をbashのようにする方法について調べました。
デフォルトでの補完方法
まず、デフォルトでのWindows PowerShellの補完方法について説明します。例として、20210101.txt, 20210103.txtという2つのファイルがあるディレクトリでWindows PowerShellのシェルを開いている場合を考えます。
Tabによる補完
1つ目の補完はTabを使う方法です。Windows PowerShellで2を押したあとにTabを押すと
> .\20210101.txt
と表示され、さらにもう一度Tabを押すと
> .\20210103.txt
が表示されます。これは伝統的なコマンドプロンプトの補完方法と同じです。
Ctrl + Spaceによる補完
2つ目の補完方法はCtrl + Spaceを使う方法です。Windows PowerShellで2を押したあとにCtrl + Spaceを押すと、2つのファイル名の共通prefixである2021010の部分までが確定して、かつ、1個目の候補である20210101.txtの残り部分 (1.txt) が選択済である状態になります(言葉で説明しづらいので実際に試してみてください)。
Windows PowerShellの補完方法がどうなっているかを調べるにはGet-PSReadLineKeyHandlerというコマンドレットを使います。デフォルト設定では以下でした。
コンプリート機能
========
Key Function Description
--- -------- -----------
Ctrl+Space MenuComplete 入力候補が 1 つだけ存在する場合は、その候補で入力を補完します。それ以外の場合は、入力候
補のメニューから項目を選択して入力を補完します。
Tab TabCompleteNext 次の入力候補を使用して入力を補完します
Shift+Tab TabCompletePrevious 前の入力候補を使用して入力を補完します
Tabによる補完方法を変える
デフォルトのTabの補完方法は耐え難いものがあるので、Tabでbashやzshのような補完ができるように変更します。その方法が PowerShellでbash-like, zsh-likeなタブ補完 - Qiita に書いてありました。
bash風の補完
> Set-PSReadLineKeyHandler -Key Tab -Function Complete
zsh風の補完(デフォルトでCtrl+Spaceによりなされる補完と同じ)
> Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
ただし、この設定はWindows Powershellのウィンドウを閉じると消えてしまいます。恒久的にこの設定を有効にしたければ、プロファイル(.bash_profile的な設定ファイル)を編集する必要があります。プロファイルは何個も種類があって正直よくわかってないですが、私は$PROFILE.CurrentUserAllHosts に
Set-PSReadLineKeyHandler -Key Tab -Function Complete
を設定しておきました。