タブ拡張について

簡単な説明

PowerShell では、ヒントを提供し、検出を有効にし、入力エントリを高速化するための入力の完了を提供します。 コマンド名、パラメーター名、引数の値、ファイル パスはすべて、Tab キーを押すことで完了できます。

長い説明

タブ展開は、TabExpansion2 内部関数によって制御されます。 この関数は変更またはオーバーライドできるため、この説明は既定の PowerShell 構成の動作に関するガイドです。

タブ展開の動作は、PSReadLine モジュールの予測 IntelliSense 機能によっても変更できます。 詳細については、「予測 IntelliSense」を参照してください。

Tab キーは、Windows の既定のキー バインドです。 キーバインドは、PSReadLine モジュールまたは PowerShell をホストしているアプリケーションを使用して変更できます。 キーバインドは、Windows 以外のプラットフォームでは異なります。 詳細については、about_PSReadLineを参照してください。

手記

タブ展開プロセスの 1 つの制限事項は、タブが常に単語を完了しようとする試みとして解釈されるということです。 コマンドの例をコピーして PowerShell コンソールに貼り付ける場合は、サンプルにタブが含まれていないことを確認します。 その場合、結果は予測不能になり、ほぼ確実に意図したものではありません。

ファイルとコマンドレットの名前の入力候補

使用可能な選択肢からファイル名またはパスを自動的に入力するには、名前の一部を入力し、Tab キーを押します。 PowerShell は、見つけた最初の一致に自動的に名前を展開します。 Tab キーを押すと、使用可能なすべての選択肢が繰り返し繰り返し表示されます。

パスの先頭にチルダ文字 (~) が表示されると、PowerShell によってユーザーのホーム ディレクトリとして解釈されます。 この解釈は、Linux および macOS システムで一般的です。 ただし、Windows 上の多くのネイティブ コマンドでは、この解釈は使用されません。 Windows の PowerShell 7.5-preview.3 以降では、タブ補完を使用する際、チルダ文字が $HOME に展開されます。 この拡張は、Windows ネイティブ コマンドで動作します。

コマンドレット名の入力候補

コマンドレット名のタブ展開は若干異なります。 コマンドレット名にタブ展開を使用するには、名前の最初の部分全体 (動詞) とその後に続くハイフンを入力します。 部分一致するよう、名前をより詳細に入力することもできます。 たとえば、「get-co」と入力し、Tab キーを押すと、PowerShell によって自動的に Get-Command コマンドレットに展開されます。 大文字小文字が標準的な形式に変更されることにも注意してください。 Tab キーをもう一度押すと、PowerShell によって、他の一致する唯一のコマンドレット名 (Get-Content) に置き換えられます。

手記

PowerShell 7.0 の時点で、Tab では省略されたコマンドレットと関数も拡張されています。 たとえば、i-psdf<tab>Import-PowerShellDataFileを返します。

タブ補完は、PowerShell エイリアスとネイティブ実行可能ファイルを解決するためにも機能します。

同じ行でタブ展開を繰り返し使用できます。 たとえば、次のように入力して、Get-Content コマンドレットの名前にタブ展開を使用できます。

使用例

PS> Get-Con<Tab>

Tab キーを押すと、コマンドは次のように展開されます。

PS> Get-Content

その後、Active Setup ログ ファイルへのパスを部分的に指定し、タブ展開をもう一度使用できます。

PS> Get-Content C:\windows\acts<Tab>

Tab キーを押すと、コマンドは次のように展開されます。

PS> Get-Content C:\windows\actsetup.log

PSReadLine には、メニュー補完機能もあります。 Windows の既定のキー バインドは、Ctrl +です。

PS> fore<Ctrl-Space>

Ctrl+Spaceを押すと、一致する値の完全な一覧がメニューとして表示されます。

PS> foreach
foreach         ForEach-Object  foreach.cmd

この例では、文字列 'fore' が foreach (PowerShell エイリアス)、ForEach-Object (コマンドレット)、および foreach.cmd (ネイティブ コマンド) と照合されます。 方向キーを使用して、目的の値を選択します。

パラメーター引数の入力候補

タブ補完は、パラメーター引数を完了するためにも機能します。 Tab キーを使用して、パラメーターに対して有効な使用可能な値の一覧を順番に表示できます。

詳細については、about_Functions_Argument_Completionを参照してください。

列挙値の入力候補

PowerShell 7.0 では、列挙型のタブ補完のサポートが追加されました。 タブ補完を使用して、列挙型を使用する任意の場所で必要な値を選択できます。 例えば:

enum Suits {
    Clubs = 0
    Diamonds = 1
    Hearts = 2
    Spades = 3
}

[Suits]$suit = 'c<Tab>

列挙値は文字列であるため、完了する値は単一引用符または二重引用符で始まる必要があります。

Tab キーを押すと、次の結果が得られます。

[Suits]$suit = 'Clubs'

タブ補完は、.NET 列挙型でも機能します。

[System.IO.FileAttributes]$attr = 'S<Tab><Tab>

タブ キーを押すと、文字 Sで始まる 2 つの値が 2 回循環します。 最終的な結果は次のとおりです。

[System.IO.FileAttributes]$attr = 'System'

PowerShell 7.0 以降では、変数に割り当てるときに ValidateSet の値のタブ拡張が追加されました。 たとえば、次の変数定義を入力した場合です。

[ValidateSet('Chocolate', 'Strawberry', 'Vanilla')]
[string]$flavor = 'Strawberry'
$flavor = <tab>

Tab キーを押すと、次の結果が得られます。

$flavor = 'Chocolate'

コメントベースのキーワードのタブ補完

PowerShell 7.2 以降では、#Requires パラメーターのタブ補完とコメントベースのヘルプのキーワードのサポートが追加されました。

#Requires ステートメントの例

#Requires -<Ctrl-Space>

メニュー展開には、次のパラメーター オプションが表示されます。

#Requires -<Ctrl-Space>
Modules     PSEdition     RunAsAdministrator    Version

コメントベースのヘルプの例

<#
    .<Ctrl-Space>

メニュー展開には、次のキーワード オプションが表示されます。

 <#
    .COMPONENT
COMPONENT      EXTERNALHELP           FUNCTIONALITY     NOTES         REMOTEHELPRUNSPACE
DESCRIPTION    FORWARDHELPCATEGORY    INPUTS            OUTPUTS       ROLE
EXAMPLE        FORWARDHELPTARGETNAME  LINK              PARAMETER     SYNOPSIS

こちらも参照ください