💨

【PC設定】PowerShell の入力予測機能って?

2024/07/14に公開

以前のPCだと、VS Code のターミナルに、過去に入力したコマンドが予測変換されて、“→”を右矢印で入力が完了するといった機能があったはずなのに、PCを買い換えたらそれが使えなくなった。
VS Code ``ターミナル``予測変換``コマンドといったWordで検索してもヒットせず、辿り着くのにまた時間がかかったので記録します。

PowerShell の入力予測機能って?

具体的なイメージ:
例えば、VS Code のターミナルで、nとか入力したら、過去に入力したことがあるものや関連のコマンドを予測して表示してくれます。
初学者はコードを覚える必要があるので、必要ないかもですが、チートシートに乗るようなコマンドは流石にこれあると便利です。

対応したこと

  • PSReadLineのインストール
  • PowerShell 7 以降へのアップグレード
    公式には、PSReadLine は、Windows PowerShell 5.1 または PowerShell 7 以上にインストールすることができるという記載があるので、アップグレートも行いました。

インストール

公式:PSReadLine の予測機能を使用する
※ NuGet プロバイダーのインストールもしました。

エラー

Install-Module -Name PSReadLine -Force -AllowClobber

# コマンドの効果
PSReadLine モジュールを強制的にインストールまたは再インストールします。
既に存在する PSReadLine モジュールがある場合でも、上書きして最新バージョンをインストールします。
AllowClobber-競合するコマンドがあっても、インストールを続行します。

を実行したら、

警告: バージョン '2.3.5' のモジュール 'PSReadLine'
は現在使用中です。アプリケーションを終了した後で、操作をやり直してください。

PSReadLine モジュールの古いバージョンが現在使用中であるため、新しいバージョンに更新できないことを示しています。

エラーへの対応

1. バージョンの確認

Get-Module -Name PSReadLine -ListAvailable


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
+`Script     2.3.5      PSReadLine`                          {Get-PSReadLineKeyHandler, Set-PSReadLineKeyHandler, Remov...


    ディレクトリ: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
+`Script     2.0.0      PSReadLine`    

2. 古いバージョンの削除

  • ユーザーディレクトリにある PSReadLine モジュールを削除
Remove-Item -Recurse -Force "$HOME\Documents\WindowsPowerShell\Modules\PSReadLine"

3. 最新バージョンのインストール

古いバージョンを削除した後、最新バージョンをインストール

powershell
Install-Module -Name PSReadLine -Scope CurrentUser -Force -AllowClobber

4. 最新バージョンの確認

インストールが完了したら、再度バージョンを確認

powershell
Get-Module -Name PSReadLine -ListAvailable

5. PSReadLine モジュールのインポート

インポートを行う。

powershell
Import-Module -Name PSReadLine -Force

6. PredictionSource の設定

最新バージョンの PSReadLine をインポート後、以下のコマンドで PredictionSource を設定

powershell
Set-PSReadLineOption -PredictionSource HistoryAndPlugin

7. VS Code での確認

VS Code を再起動し、PowerShell 7 を使用していることを確認し、PSReadLine の予測機能が有効になっているか確認

PredictionSourceについて

PSReadLine モジュールの設定オプションの一つで、PowerShell 7.2 以降でサポートされているようです。このオプションは、コマンドラインで入力予測機能を有効にするためのもので、以下に詳細を記載します。

  • 概要
    PredictionSource オプションは、コマンドラインでの入力時に予測機能を提供するために使用されます。これにより、過去のコマンド履歴やプラグインからの予測を基に、ユーザーが入力を続けるための候補を表示します。

  • 設定オプション

  • None:
    予測機能を無効にします。コマンド履歴やプラグインからの予測は表示されません。

  • History:
    コマンド履歴からの予測を有効にします。以前に入力したコマンドが予測として表示されます。

  • Plugin:
    プラグインからの予測を有効にします。これには、外部プラグインから提供される予測が含まれます。

  • HistoryAndPlugin:
    コマンド履歴とプラグインの両方からの予測を有効にします。以前に入力したコマンドとプラグインから提供される予測の両方が表示されます。

PowerShell 7 以降へのアップグレード

PowerShell 7 のインストール手順

1. PowerShell 7 のダウンロード

PowerShell GitHub リリースページにアクセスします。
https://github.com/PowerShell/PowerShell/releases
最新のリリース(この記事の執筆時点では v7.4.3)を見つけます。
使用しているオペレーティングシステムに対応するインストーラをダウンロードします。Windows の場合は、MSI パッケージを選択します。
Windows インストーラをダウンロードできます(例として v7.4.3 を使用しています):
PowerShell-7.4.3-win-x64.msi

2. PowerShell 7 のインストール

ダウンロードした MSI パッケージをダブルクリックしてインストールを開始します。
インストーラの指示に従ってインストールを進めます。

3. PowerShell 7 の起動

インストールが完了したら、新しい PowerShell 7 を起動します。スタートメニューから PowerShell 7 を探して起動するか、以下のコマンドを実行します。

powershell
pwsh

4. VS Code での設定

VS Code を再起動し、PowerShell 7 のシェルを使用していることを確認します。

    1. VS Code を開きます。
    1. Ctrl + Shift + P を押してコマンドパレットを開きます。
    1. Terminal: Select Default Profile を検索して選択します。
    1. リストから PowerShell 7(またはインストールしたバージョン)を選択します。

これで、前のPCと同じように使えるようになりました😂🧚‍♀️

Discussion