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
を設定しておきました。