stylesheet

2022-09-10

Windows PowerShell で Emacs (bash-like) キーバインドを有効にする

PowerShellでもEmacsキーバインドが使えるらしい。 すぐにSSHしてしまうので利用頻度が低いとは言え、微妙にストレスを感じていたのでありがたい。

EmacsキーバインドはPSReadLineモジュールの機能として提供されているようだ。 以下、Windows11 21H2 + PowerShell 7.2.6 での設定方法を記録しておく。

Emacsキーバインド設定手順:

1. PSReadLineモジュールを更新。

PowerShellで以下のコマンド実行。

Install-Module -Name PSReadLine -AllowClobber -Force

2. Emacsキーバインドを有効にする。

続けてPowerShellで以下のコマンドを入力。

Import-Module PSReadLine
Set-PSReadlineOption -EditMode Emacs

以上で、Emacsキーバインドが有効になった。

3. 設定の永続化。

このままでは起動し直すともとに戻る。一通り確認して気に入るようであれば、上記内容をプロファイルに書き込む。通常、プロファイルは、~/Documents/PowerShell\Microsoft.PowerShell_profile.ps1となるようだ。 プロファイルは環境変数$PROFILEにパスが記載されているので、メモ帳で素早く楽に開ける。

notepad $PROFILE

以下の内容を追加して保存する。

Import-Module PSReadLine
Set-PSReadlineOption -EditMode Emacs

実行権限がないと怒られる場合は、管理者権限で以下のコマンド実行してみるとよい。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

以上で、次回起動時もEmacsキーバインドが有効となる。

その他:

その他、PSReadLine関連の話として…

PSReadLine2.2.6から予測IntelliSense(Predictive IntelliSense)がデフォルトで有効となったとのこと。 無効にしたい場合はPredictionSourceへNoneを設定する。もう一度、有効にしたい場合はHistoryを設定。

Set-PSReadLineOption -PredictionSource None
Set-PSReadLineOption -PredictionSource History

また、PSReadLineはコマンド履歴を$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLineディレクトリに保存する。パスワードやトークンなどを含む場合はフィルタ処理されているようだが、注意しておいたほうが良い。 もちろん、HistorySaveStyleを設定することで履歴ファイルを使用しないようにできるようだ。

Set-PSReadLineOption -HistorySaveStyle SaveNothing

ビープ音がピコピコうるさい件は、PSReadLine側にベルスタイルの設定があるので無効に。

Set-PSReadLineOption -BellStyle None

参考文献:

PowerShellオンラインドキュメント PSReadLineリファレンス PSReadLine 2.2.6 enables Predictive Intellisense by default