PSReadLine 2.2は注目しておきたいモジュール

前回、「PSReadLine 2.2」を取り上げた。PSReadLine 2.2自体は、導入された機能からすればマイナーアップデートとも捉えられそうだが、今後正式版になることが推測されるバージョンであり、PowerShell 7をインタラクティブシェルとする全ユーザーにとって価値のあるモジュールだ。使うことで確実に操作の効率を上げることができるため、今回も引き続き、このモジュールについて解説したい。

PSReadLine 2.2の新機能や変更点は前回紹介した通り、以下にまとまっている。

前回はこのモジュールで注目すべき、そして利用すべき機能として「入力予測機能」を取り上げた。ユーザーが過去に入力したコマンドやコマンドレットに基づいて、これから入力される可能性がある文字列を薄い色で先行表示する機能で、一致している場合はそれをそのまま実行できるというものだ。この機能はユーザーの入力を邪魔することがなく、必要なときに入力の手間を省いてくれるという特徴がある。

今回は、この機能をさらに便利に使うカスタマイズの方法を取り上げる。

入力予測機能をカスタマイズ

まず、PSReadLine 2.2の入力予測機能を使う場合、次のコマンドレットを実行する必要がある。PowerShell 7を起動するごとに有効化するには、この処理を$PROFILEへ書き込んでおけばよい。

Set-PSReadLineOption -PredictionSource History

通常は、プロンプト行に予測候補が表示される。これはデフォルトの動作で、次のコマンドレットを実行した設定と同じになる。

Set-PSReadLineOption -PredictionViewStyle InlineView

PSReadLine 2.2にはこの予測候補表示を一覧表示する機能が実装されており、次のコマンドレットを実行することで有効化することができる。この設定に関しては前回説明した通りだ。

Set-PSReadLineOption -PredictionViewStyle ListView

ListViewで一覧表示を行うかどうかは好みが分かれるところだ。ListViewによる一覧表示はインラインでの表示に比べると人間の認知に時間がかかる。高速な操作を求める場合には、デフォルトのインライン表示の方がよいのではないかと思う。

入力予測機能を有効化した状態であれば、コマンドの入力を始めると過去のコマンド入力に一致して推測が可能と判断された段階で、薄い色の文字で予測候補が表示される。

  • 入力予測が表示された状態

    入力予測が表示された状態

上記の状態で「→」キーを押すと、薄い色の文字部分がそのまま入力される。

  • 「→」キーを押すと透かし文字がまるっと入力される

    「→」キーを押すと薄い色の文字部分がそのまま入力される

これが入力予測機能だ。

この機能は、LinuxやMacなどUNIX系のOSで使われることが多い「fish」というインタラクティブシェルの機能によく似ている。fishは多機能シェルの中では後発に分類されるシェルで、ほとんど設定を行うことなく便利なインタラクティブ機能が有効になっている。PSReadLine 2.2の入力予測機能によく似た機能が実装されており、機能が実装された時期を考えると、PSReadLine 2.2に導入された入力予測機能はfishの機能に影響を受けたものと思われる。

便利な機能なので、特にインタラクティブシェルの操作性にこだわるユーザーはLinuxなどでfishを使っている可能性がある。ただし、fishでは入力予測の文字を入力するショートカットキーは「Ctrl」+「F」だ。「→」キーではない。

これは、少々問題がある。Linuxを使っているときに「→」を入力して思ったように動作せずイラッとしてしまい、Windowsを使っているときに「Ctrl」+「F」を入力してイラッとする、という状況が生まれてしまうのだ。

登場のタイミングを考えると、PSReadLine 2.2よりもfishの方がよほど古いため、入力予測文字の入力には「Ctrl」+「F」が身についてしまっているユーザーが多いと推測される。PSReadLine 2.2側でショートカットキー設定を行い、「→」だけではなく「Ctrl」+「F」でも入力予測を入力できるようにすれば、この苛立ちは解消できるだろう。

PSReadLine 2.2では次のようにコマンドレットを実行することで、「→」による入力予測文字の入力と同じ動作を「Ctrl」+「F」で行える。

Set-PSReadLineKeyHandler -Key "Ctrl+f" -Function AcceptSuggestion

せっかく新しくショートカットキーを設定するのであれば、次の設定も知っておきたい。

Set-PSReadLineKeyHandler -Key "Ctrl+f" -Function AcceptNextSuggestionWord

こちらのコマンドレットでは、もう少し柔軟な動きをするようになる。「Ctrl」+「F」にAcceptSuggestionを割り当てた場合には、入力予測文字が入力されるだけだが、上記のようにAcceptNextSuggestionWordに割り当てると、入力予測文字を入力した後に、さらに入力補完候補があれば表示するようになる。この辺りは使い方の好みの問題になるのだが、知っておいて損はない。また、こちらの方が多少包括的な使い方が可能になるので一度試してみてもよいかと思う。

AcceptNextSuggestionWordに割り当てた設定の方で動作させてみると、次のようになる。

  • 入力予測候補が表示された状態。ここで「Ctrl」+「F」を押す

    入力予測候補が表示された状態。ここで「Ctrl」+「F」を押す

上記状態で「Ctrl」+「F」を押すと、次のスクリーンショットのように入力予測文字が入力され、さらに追加で補完可能な入力予測が薄い色の文字で表示される。

  • 入力予測が入力されたあと、さらに入力予測が表示された状態。ここで「Ctrl」+「F」を押す

    入力予測が入力された後、さらに入力予測が表示された状態。ここで「Ctrl」+「F」を押す

上記状態でさらに「Ctrl」+「F」を押すと、次のように入力予測文字が入力され、さらに追加で補完可能な入力予測が表示される。

  • 入力予測が入力されたあと、さらに入力予測が表示された状態。ここで「Ctrl」+「F」を押す

    入力予測が入力された後、さらに入力予測が表示された状態。ここで「Ctrl」+「F」を押す

次の画面が、全ての入力予測が表示され、入力された後の状態となる。

  • すべての入力予測が入力された状態

    全ての入力予測が入力された状態

AcceptSuggestionであれば最初の入力予測文字の入力で終了、AcceptNextSuggestionWordであれば上記のように可能なところまで入力予測文字が追加で表示される、といった具合だ。

設定をまとめると、次のようになる。

Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle InlineView
Set-PSReadLineKeyHandler -Key "Ctrl+f" -Function AcceptNextSuggestionWord

最初に説明したように、この設定はPowerShellを終了すると消えてしまうので、永続的に使いたい場合には$PROFILEへ書き込んでおくと便利だろう。

Windows PowerShellでPSReadLine 2.2を使う?

現在のWindowsには、互換性目的でWindows PowerShell 5.1がデフォルトインストールされている。このバージョンには以下のようにPSReadLine 2.0.0が導入されている。

  • Windows PowerShell 5.1にはPSReadLine 2.0.0が同梱されている

    Windows PowerShell 5.1にはPSReadLine 2.0.0が同梱されている

Windows 5.1においてもPSReadLine 2.2は使うことができ、管理者権限で次のコマンドレットを実行することでインストールが可能だとされている。

Windows PowerShellでPSReadLine 2.2をインストールする方法

Install-Module -Name PSReadLine -Force

ただし、筆者はこれはあまり行わない方がよいのではないかと思っている。MicrosoftはすでにWindows PowerShell 5.1を互換性目的でのみ提供しているため、PowerShell 7以降のより新しいバージョンを使うことを推奨している。

PSReadLine 2.2の恩恵を受けたい場合には、Windows PowerShell 5.1ではなくPowerShell 7の最新版と共に使用しよう。Windows PowerShell 5.1には、手を加えないでそのままにしておいた方が無難だ。