PowerShellをbashの操作性に近づける

Tips

はじめに

主に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-Itemtouch コマンドを使えるようにしています。厳密には New-Item はファイル作成コマンドのため、既存ファイルのタイムスタンプ更新はできませんが、新規ファイルを素早く作る用途では十分です。

他にも llGet-ChildItem -la のようなエイリアスを追加すると、より快適に使えます。

function ll { Get-ChildItem -Force @args }
Set-Alias ll ll

まとめ

プロファイルを設定することで、PowerShellをbashに近い操作感で使えます。特にキーバインドの設定は、普段からbashを使っている人にとって違和感を大幅に減らせます。

実際に設定してみると、以前は毎回「PowerShellのキーバインドどれだっけ」とストレスを感じていた場面がなくなりました。WSLとWindowsを行き来する機会が多い方は、ぜひ一度設定してみてください。

コメント

タイトルとURLをコピーしました