【macOSでPowerShell Core】キーバインドをカスタマイズする

PowerShell Coreの PSReadLineを使ってキーバインドをカスタマイズします。 1. PSReadLineとは 2. Get/Set-PSReadLineOption 3. Get/Set-PSReadLineKeyHandler 4. 設定例
2019.06.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

コンサルティング部の川原です。

以前 macOSに PowerShell Core 6.2を入れました。 (記事)

今回は PowerShell Core の PSReadLine を使って キーバインドをカスタマイズします。

検証環境は下記のとおりです

  • OS: macOS Mojave, version 10.14.5
  • PSVersion: 6.2.1

PSReadLine とは

Microsoft: PSReadLine

PSReadLine はコマンドラインの編集環境をカスタマイズするためのモジュールです。 PowerShell v6 には PSReadLine v2.0 が同梱されています。

関連する主なコマンドレットは下記の 2種類です。

  • Get/Set-PSReadLineOption: オプション設定の表示/設定
  • Get/Set-PSReadLineKeyHandler: キーバインドの表示/設定

Get/Set-PSReadLineOption (オプション設定)

Get-PSReadLineOption で現在のオプション設定を表示できます。

表示されている各設定項目は Set-PSReadLineOption で変更できます。 詳細は Microsoft: Set-PSReadLineOption を参照ください。

キーバインドに影響するのは -EditMode パラメータです。 Windows, Emacs, Vi の 3値から選択します。

# キーバインドを PowerShell/cmd 風に変更
Set-PSReadLineOption -EditMode Windows

# キーバインドを Emacs 風に変更
Set-PSReadLineOption -EditMode Emacs

# キーバインドを Vi 風に変更
Set-PSReadLineOption -EditMode Vi

Get/Set-PSReadLineKeyHandler (キーバインド設定)

Get-PSReadLineKeyHandler で現在のキーバインド設定を表示できます。

Set-PSReadLineKeyHandler でキーバインド設定を変更できます。

詳細は Microsoft: Set-PSReadLineKeyHandler を参照ください。

設定例

Set-PSReadLineOption

まず 編集モード (Windows, Emacs, Vi) を設定します。 今回は Emacs を選択します。

# 編集モードを Emacsとする
Set-PSReadLineOption -EditMode Emacs

Set-PSReadLineKeyHandler

編集モードを決定した後、いろいろとキーバインドを試してみます。 変更したいキーバインドがあれば Set-PSReadLineKeyHandler で変更します。

私は下記変更を行いました。

# "Ctrl+d" を "DeleteChar"とする
Set-PSReadLineKeyHandler -Chord Ctrl+d -Function DeleteChar

Emacs 編集モード の Ctrl+d はデフォルトで DeleteCharOrExit です。 通常時は Delete の機能ですが、空行の状態で Ctrl+d を実行すると PowerShellプロセスが終了します。

誤爆で PowerShellプロセス終了することが何度かあったので、 DeleteChar に変更しました。

$PROFILE に保存

最後に PowerShell起動時に設定が反映されるように $PROFILE にこれまでの内容を記します。

# 編集モードを Emacsとする
Set-PSReadLineOption -EditMode Emacs

# "Ctrl+d" を "DeleteChar"とする
Set-PSReadLineKeyHandler -Chord Ctrl+d -Function DeleteChar

まとめ

以上、PSReadLine を使ったキーバインド設定でした。

PSReadLineは他にも プロンプトテキストの変更や、変数名・エラーメッセージなどの 文字色も変更することができます。 活用して自分好みのコンソール環境にしてみてはいかがでしょうか。