はじめに
デフォルトの PowerShellの設定では Ctrl+pやCtrl+n でコマンド履歴が追えなかったり、Ctrl+a や Ctrl+e で行頭/行末に飛べなかったりとストレスを感じたため、これらをEmacsライクな行編集モードに設定するための方法について調べた
PowerShell で Emacs風キーバインドを設定する
上記のEmacs風キーバインドは PoserShell 上で Set-PSReadLineOption -BellStyle None -EditMode Emacs
を設定することで実現できる。
ただしこれだけでは、シェルを閉じたときに設定値が失われてしまうので、.bashrc 的なものに設定情報を保存しておく必要がある
PowerShell で .bashrc のようなものを設定する
PowerShellでは以下の環境変数にプロファイル情報のパスが記載されている。
$Profile.AllUsersAllHosts
$Profile.AllUsersCurrentHost
$Profile.CurrentUserAllHosts
$Profile.CurrentUserCurrentHost
今回は、$Profile.CurrentUserAllHosts
を使用して以下のように設定した。
echo '$script = "$Home\profile.ps1"
if (Test-Path $script) {
. $script
}' > $Profile.CurrentUserAllHosts
echo "Set-PSReadLineOption -BellStyle None -EditMode Emacs" >> $Home\profile.ps1
. $PROFILE.CurrentUserAllHosts
を実行するかPowerShellを再起動することで設定が反映される。
権限エラーで上記スクリプトが実行できない場合は、ExecutionPolicy を設定する必要がある。
今回は RemoteSigned
(ローカルのスクリプトは実行できるが、インターネットからダウンロードした外部のスクリプトについては署名が必要)を設定した。
Set-ExecutionPolicy RemoteSigned
参考文献
https://qiita.com/smicle/items/0ca4e6ae14ea92000d18
https://qiita.com/alchemist/items/e6706cd425f8f5e5032e