PSReadLine キー ハンドラーの使用
PSReadLine モジュールには、PSReadLine 関数をキーボード コードにマップするキー ハンドラーが用意されています。 キーボード コードとは、同時に押される 1 つ以上のキーストロークのシーケンスです。
たとえば、Ctrl+Space キーというコードは、同時に押す Ctrl キーと Space キーの組み合わせです。 PSReadLine 関数は、コマンド ラインで実行できる定義済みのアクションです。 たとえば、MenuComplete
関数を使うと、コマンド ラインでメニューのオプションの一覧から選択を行い、入力を完了できます。
PSReadLine には、既定でバインドされている定義済みのキー ハンドラーがいくつかあります。 また、独自のカスタム キー ハンドラーを定義することもできます。 次のコマンドを実行すると、現在定義されているキー ハンドラーを一覧表示できます。
Get-PSReadLineKeyHandler
また、キー コードにバインドできる、バインドされていないすべての PSReadLine 関数の一覧を取得することもできます。
Get-PSReadLineKeyHandler -Unbound
Set-PSReadLineKeyHandler
コマンドレットを使って、関数をキー ハンドラーにバインドできます。 次のコマンドでは、MenuComplete
関数を Ctrl+Space キーというコードにバインドします。
Set-PSReadLineKeyHandler -Chord 'Ctrl+Spacebar' -Function MenuComplete
キー名とコード バインドの検索
コード内のキーの名前は、[System.ConsoleKey]
列挙型によって定義されます。 詳しくは、System.ConsoleKey のドキュメントを参照してください。 たとえば、[System.ConsoleKey]
の 2 キーの名前は D2
です。一方、テンキーの 2 キーの名前は NumPad2
です。 [System.Console]::ReadKey()
メソッドを使って、押したキーの名前を確認することができます。
[System.Console]::ReadKey()
次の出力は、Ctrl+2 キーというキー コードに対して ReadKey()
メソッドから返される情報を示しています。
KeyChar Key Modifiers
------- --- ---------
D2 Control
PSReadLine キー ハンドラー コマンドレットの場合、このコードは Ctrl+D2
として表されます。 次の例では、このコードを関数にバインドしています。
Set-PSReadLineKeyHandler -Chord 'Ctrl+D2' -Function MenuComplete
複数のコードを 1 つの関数にバインドできます。 既定では、BackwardDeleteChar
関数は 2 つのコードにバインドされています。
Get-PSReadLineKeyHandler -Chord Backspace, Ctrl+h
Key Function Description
--- -------- -----------
Backspace BackwardDeleteChar Delete the character before the cursor
Ctrl+h BackwardDeleteChar Delete the character before the cursor
注意
Chord パラメーターでは、大文字と小文字が区別されます。 つまり、Ctrl+X キーと Ctrl+x キーに対して異なるバインドを作成できます。
Windows では、Alt+? キーというキー コードを使って、次に入力するキー コードにバインドされている関数を表示することもできます。 Alt+? キーを押すと、次のプロンプトが表示されます。
what-is-key:
Backspace キーを押すと、次の応答が返されます。
Backspace: BackwardDeleteChar - Delete the character before the cursor
Windows 以外のコンピューターでのキー ハンドラー
キーボードによって生成されるキー コードは、使用しているオペレーティング システムとターミナル アプリケーションによって異なる場合があります。
macOS
Macintosh キーボードには、Windows や Linux システムのような Alt キーがありません。 代わりに、⌥ Option キーがあります。 macOS では、他のシステムの Alt キーとは異なる方法でこのキーを使います。 しかし、macOS でターミナルと iTerm2 アプリケーションを構成すれば、Alt キーとして扱うことができます。
ターミナル アプリケーションの構成
ターミナル.app の [アプリ] バーから [設定] ウィンドウを開きます。 [プロファイル] を選択し、構成するプロファイルを選択します。 構成オプションの [キーボード] タブを選択します。 キーの一覧の下にある [メタキーとしてOptionキーを使用] 設定を選択します。 この設定により、ターミナル アプリケーションで ⌥ Option キーを Alt キーとして使うことができます。
iTerm2 アプリケーションの構成
iTerm.app の [アプリ] バーから [設定] ウィンドウを開きます。 [Profiles] (プロファイル) を選択し、構成するプロファイルを選択します。 構成オプションの [Keys] (キー) タブを選択します。 [Left Option Key] (左 Option キー) と [Right Option Key] (右 Option キー) の両方の設定で [Esc+] オプションを選択します。 この設定により、iTerm アプリケーションで ⌥ Option キーを Alt キーとして使うことができます。
注意
厳密な手順は、macOS とターミナル アプリケーションのバージョンによって異なる場合があります。 これらの例は、macOS Ventura 13.2.1 と iTerm2 v3.4.16 を使用したものです。
Linux
Linux プラットフォームの場合、生成されるキー コードは他のシステムとは異なる場合があります。 たとえば次のような点です。
Ctrl+[ キーは Escape キーと同じです
Ctrl+Space キーを押すと、Ctrl+D2 のキー コードが生成されます。 関数を Ctrl+Space キーにマップしたいときは、コード
Ctrl+D2
を使う必要があります。Set-PSReadLineKeyHandler -Chord 'Ctrl+D2' -Function MenuComplete
ReadKey()
メソッドを使って、キーボードによって生成されたキー コードを確認します。
よく使われるキー ハンドラー
Windows で既定でバインドされている、よく使われるキー ハンドラーをいくつか次に示します。 Windows 以外のプラットフォームでは、キー バインドが異なる場合があることに注意してください。
MenuComplete
入力可能な値のメニューから選択を行い、入力を完了します。
既定のコード: Ctrl+Spacebar
次の例は、select
で始まるコマンドに対する入力候補のメニューを示しています。
PS C:\> select<Ctrl+Spacebar>
select Select-Object Select-PSFPropertyValue Select-Xml
Select-AzContext Select-PSFConfig Select-PSMDBuildProject
Select-AzSubscription Select-PSFObject Select-String
Select-Object
方向キーを使って、目的の入力候補を選択します。 Enter キーを押して入力を完了します。 選択肢を移動する際に、選択したコマンドのヘルプがメニューの下に表示されます。
ClearScreen
この関数は、cls
コマンドや clear
コマンドと同様に画面をクリアします。
既定のコード: Ctrl+l
SelectCommandArgument
コマンド ラインの次の引数を選択します。
既定のコード: Alt+a
異なるパラメーター値を使ってもう一度実行したいコマンドが履歴にある場合があります。 このコードを使うと、各パラメーターに順番に移動し、必要に応じて値を変更することができます。
New-AzVM -ResourceGroupName myRGName -Location eastus -Name myVM
Alt+a キーを押すと、次のパラメーター引数が順番に選択されます (myRGName
、eastus
、myVM
)。
GotoBrace
カーソルを対応するかっこに移動します。
既定のコード: Ctrl+]
この関数は、コマンド ライン上でカーソルを、現在のカーソル位置にあるかっこに対応する右かっこに移動します。 この関数は、角かっこ ([]
)、中かっこ ({}
)、かっこ (()
) に対して機能します。
DigitArgument
数値引数の使用を開始または累積して、キーストロークを指定した回数だけ繰り返します。
既定のコード: Alt+0
から Alt+9
たとえば、コマンド ラインで Alt+4+# キーを押すと、####
が入力されます。
こちらもご覧ください
PowerShell