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