PSReadLine の予測機能を使用する

PSReadLine 2.1.0 で Predictive IntelliSense 機能が導入されました。 予測 IntelliSense により、PSReadLine 履歴にある項目に基づいて、完全なコマンドの候補が表示されます。 PSReadLine 2.2.2 は、高度なロジックを使用して完全なコマンドの候補を表示するプラグイン モジュールのサポートを追加することで、予測 IntelliSense の機能を拡張しています。 最新バージョンの PSReadLine 2.2.6 では、既定で予測が有効になります。

予測 IntelliSense の使用

予測 IntelliSense が有効になっている場合、予測候補がユーザーのカーソルの後に色付きのテキストとして表示されます。 予測 IntelliSense からの候補は、PowerShell の新規および経験豊富なユーザーが、一致している予測に基づいて完全なコマンドを発見、編集、実行するのに役立ちます。 候補は、ユーザーの履歴と追加のドメイン固有プラグインから提示されます。

予測のインライン ビュー

前の画像は、候補の既定の InlineView を示しています。 右方向キーを押すことでインライン候補を受け入れます。 候補を受け入れた後、Enter キーを押してコマンドを実行する前に、コマンド ラインを編集できます。

PSReadLine には、候補の ListView 表示も用意されています。

予測のリスト ビュー

リスト ビューの場合は、方向キーを使用して、使用可能な候補をスクロールできます。 リスト ビューには、予測のソースも表示されます。

PSReadLine は既定で InlineView になります。 F2 キーを押して InlineViewListView を切り替えることができます。 また、Set-PSReadLineOptionPredictionViewStyle パラメーターを使用してビューを変更することもできます。

予測 IntelliSense の管理

予測 IntelliSense を使用するには、新しいバージョンの PSReadLine がインストールされている必要があります。 最良の結果を得るためには、最新バージョンのモジュールをインストールしてください。

PowerShellGet を使用して PSReadLine をインストールするには、次のようにします。

Install-Module -Name PSReadLine

または、新しい PowerShellGet v3 モジュールを使用してインストールします。

Install-PSResource -Name PSReadLine

PSReadLine は、Windows PowerShell 5.1 または PowerShell 7 以上にインストールすることができます。 予測機能のプラグインを使用するには、PowerShell 7.2 以降を実行している必要があります。 Windows PowerShell 5.1 では、履歴ベースの予測機能を使用することができます。

PSReadLine 2.2.6 では、予測 IntelliSense は、次の条件に応じて既定で有効になります。

  • 仮想ターミナル (VT) がサポートされていて、PSReadLine が PowerShell 7.2 以降で実行されている場合、PredictionSourceHistoryAndPlugin に設定されます
  • VT がサポートされていて、PSReadLine が 7.2 より前の PowerShell で実行されている場合、PredictionSourceHistory に設定されます
  • VT がサポートされていない場合、PredictionSourceNone に設定されます。

現在の設定を確認するには、次のコマンドを使用します。

Get-PSReadLineOption | Select-Object -Property PredictionSource

予測のソースは、PredictionSource パラメーターを指定した Set-PSReadLineOption コマンドレットを使用して変更できます。 PredictionSource は次のように設定できます。

  • None
  • History
  • Plugin
  • HistoryAndPlugin

注意

履歴ベースの予測は、PSReadLine によって管理される履歴から取得されます。 その履歴は、Get-History を使用して確認できるセッションベースの履歴よりも包括的です。 詳細については、about_PSReadLine の「コマンド履歴」セクションを参照してください。

予測の色の設定

既定では、予測は、ユーザーが入力しているのと同じ行に淡い灰色のテキストで表示されます。 アクセシビリティのニーズをサポートするために、予測の色をカスタマイズできます。 色は ANSI エスケープ シーケンスを使用して定義します。 ANSI エスケープ シーケンスは $PSStyle を使用して作成できます。

Set-PSReadLineOption -Colors @{ InlinePrediction = $PSStyle.Background.Blue }

または、独自のものを作成することもできます。 既定の淡い灰色の予測テキストの色は、次の ANSI エスケープ シーケンスを使用して復元できます。

Set-PSReadLineOption -Colors @{ InlinePrediction = "`e[38;5;238m" }

予測の色とその他の PSReadLine 設定項目の設定の詳細については、「Set-PSReadLineOption」を参照してください。

キー バインドの変更

PSReadLine には、予測の操作と受け入れのための関数が含まれています。 次に例を示します。

  • AcceptSuggestion - 現在のインライン候補を受け入れます
  • AcceptNextSuggestionWord - インライン候補の次の単語を受け入れます
  • AcceptSuggestionForwardChar 内に作成され、既定で RightArrow にバインドされています
  • AcceptNextSuggestionWord は関数 ForwardWord 内に作成され、Ctrl+f にバインドできます

Set-PSReadLineKeyHandler コマンドレットを使用して、キー バインドを変更できます。

Set-PSReadLineKeyHandler -Chord "Ctrl+f" -Function ForwardWord

このバインドでは、カーソルが現在の編集行の末尾にあるときに Ctrl+f キーを押すと、インライン候補の次の単語が受け入れられます。 同様の機能のために他のキーを AcceptSuggestion および AcceptNextSuggestionWord にバインドできます。 たとえば、RightArrow で、インライン候補の行全体ではなく、候補の次の単語を受け入れるようにすることができます。

Set-PSReadLineKeyHandler -Chord "RightArrow" -Function ForwardWord

他の予測機能プラグインの使用

Az.Tools.Predictor モジュールは、予測 IntelliSense の最初のプラグインでした。 それにより、実行しようとしている Azure PowerShell コマンドと、使用しようとしているパラメーターが、Machine Learning を使用して予測されます。 詳細とインストール手順については、「Az.Tools.Predictor の一般公開の発表」を参照してください。

CompletionPredictor モジュールによって、PowerShell でタブ補完できる項目に IntelliSense エクスペリエンスが追加されます。 PSReadLineInlineView に設定すると、通常のタブ補完エクスペリエンスが得られます。 ListView に切り替えると、IntelliSense エクスペリエンスが得られます。 CompletionPredictor モジュールは、PowerShell ギャラリーからインストールできます。

CompletionPredictor を使用した PowerShell IntelliSense

前述のように、ListView には予測のソースが表示されます。 複数のプラグインがインストールされている場合、予測はソースごとにグループ化され、最初に履歴、その後に各プラグインが、読み込まれた順序で表示されます。

独自の予測モジュールの作成

C# を使用して独自の予測機能を記述し、コンパイル済みの PowerShell モジュールを作成できます。 そのモジュールで System.Management.Automation.Subsystem.Prediction.ICommandPredictor インターフェイスを実装する必要があります。 このインターフェイスでは、予測結果を照会し、フィードバックを提供するために使われるメソッドが宣言されます。

詳細については、「コマンドライン予測器を作成する方法」を参照してください。