はじめに
主にWSLを使ってUbuntu上で開発をしていますが、たまにWindows側でPowerShellを使って開発する場面があります。bashを使い慣れていると、Ctrl+a で行頭に移動しようとしたり Ctrl+w で直前の単語を削除しようとしたりと、思った動作にならずフラストレーションがたまります。
この記事では、PowerShellをbashに近い操作感で使うための設定を紹介します。一度プロファイルを作成しておけば、以降のセッションから自動的に適用されます。
なぜPowerShell 7を使うのか
Windowsには標準で「Windows PowerShell 5.1」がインストールされています。しかし、PowerShell 7(旧称: PowerShell Core)を別途インストールして使うことをおすすめします。理由は以下のとおりです。
- PSReadLineの機能が充実: PowerShell 7に同梱されるPSReadLineは新しいバージョンが使われており、後述するリストビュー補完や予測入力が安定して動作します
- .NET 最新版ベース: Windows PowerShell 5.1は.NET Framework依存ですが、PowerShell 7は.NET 6/7/8ベースで動作するためモダンなAPIが使えます
- クロスプラットフォーム: Linuxでも同じPowerShellを使えるため、スクリプトの移植性が高まります
Windows PowerShell 5.1でも似たような設定は可能ですが、PSReadLineのバージョンが古くリストビュー表示に対応していない場合があります。
PowerShell 7のインストール
Microsoft Storeから「PowerShell」と検索してインストールできます。または以下のコマンドでwingetからインストールすることもできます。
winget install --id Microsoft.PowerShell --source wingetインストール後、スタートメニューで「PowerShell 7」と検索して起動するか、ターミナルから pwsh コマンドで起動できます。
プロファイルを作成する
PowerShellには起動時に自動で読み込まれるプロファイルがあります。bashでいう .bashrc や .bash_profile に相当するものです。
プロファイルのパスは以下のコマンドで確認できます。
$PROFILE初回起動時はファイルが存在しないため、以下のコマンドで作成します。
New-Item -Path $PROFILE -ItemType File -Force作成したら、任意のエディタで開いて内容を編集します。VSCodeを使っている場合は code $PROFILE で開けます。
プロファイルの内容
現在は以下の内容をプロファイルに記述しています。
Set-PSReadLineKeyHandler -Key "Ctrl+w" -Function BackwardKillWord
Set-PSReadLineKeyHandler -Key "Ctrl+u" -Function BackwardDeleteLine
Set-PSReadLineKeyHandler -Key "Ctrl+a" -Function BeginningOfLine
Set-PSReadLineKeyHandler -Key "Ctrl+e" -Function EndOfLine
Set-PSReadLineKeyHandler -Key "Ctrl+p" -Function PreviousHistory
Set-PSReadLineKeyHandler -Key "Ctrl+n" -Function NextHistory
Set-PSReadLineOption -PredictionViewStyle ListView # 候補の表示スタイルをリストビューに設定
Set-PSReadLineKeyHandler -Key Tab -Function Complete # タブキーでコマンド候補を表示
Set-Alias touch New-Itemキーバインドの設定
Set-PSReadLineKeyHandler を使うことで、bashライクなキーバインドを設定できます。
| キー | 動作 |
|---|---|
Ctrl+w | カーソル前の単語を削除 |
Ctrl+u | カーソルより前の行全体を削除 |
Ctrl+a | 行頭に移動 |
Ctrl+e | 行末に移動 |
Ctrl+p | 前のヒストリーに移動 |
Ctrl+n | 次のヒストリーに移動 |
デフォルトのPowerShellでは Ctrl+p / Ctrl+n はヒストリー移動ではなく別の動作にバインドされているため、bashと同じ感覚で使えるようにするには明示的な設定が必要です。特に Ctrl+a は「全選択」としてWindowsアプリでは一般的ですが、シェルの行頭移動として慣れていると混乱するポイントです。
候補の表示
Set-PSReadLineOption -PredictionViewStyle ListView を設定すると、コマンド入力中にヒストリーや候補をリスト形式でドロップダウン表示してくれます。矢印キーで選択してEnterで確定できるため、長いコマンドを再入力する手間が大幅に減ります。
タブキーの補完は Complete 関数に割り当てることで、bashと同じような補完動作になります。デフォルトのMenuComplete(循環補完)より直感的に使えます。
エイリアスの設定
Set-Alias touch New-Item で touch コマンドを使えるようにしています。厳密には New-Item はファイル作成コマンドのため、既存ファイルのタイムスタンプ更新はできませんが、新規ファイルを素早く作る用途では十分です。
他にも ll → Get-ChildItem -la のようなエイリアスを追加すると、より快適に使えます。
function ll { Get-ChildItem -Force @args }
Set-Alias ll llまとめ
プロファイルを設定することで、PowerShellをbashに近い操作感で使えます。特にキーバインドの設定は、普段からbashを使っている人にとって違和感を大幅に減らせます。
実際に設定してみると、以前は毎回「PowerShellのキーバインドどれだっけ」とストレスを感じていた場面がなくなりました。WSLとWindowsを行き来する機会が多い方は、ぜひ一度設定してみてください。


コメント