about_Tab_Expansion

简短说明

PowerShell 提供输入自动补全功能,以提供提示、启用发现和加快条目输入速度。 通过按 Tab 键,可自动补全命令名称、参数名称、参数值和文件路径。

长说明

选项卡扩展由内部函数 TabExpansionTabExpansion2 控制。 由于此函数可被修改或覆盖,所以此讨论可用作针对默认 PowerShell 配置的行为的指导。

Tab 键是 Windows 上的默认键绑定。 PSReadLine 模块或托管 PowerShell 的应用程序可以更改此密钥绑定。 密钥绑定在非 Windows 平台上是不同的。 有关详细信息,请参阅 about_PSReadLine

注意

Tab 键扩展进程的一个限制是 Tab 键始终解释为尝试完成单词。 如果将命令示例复制并粘贴到 PowerShell 控制台,请确保该示例不包含 Tab 键;如果包含 Tab 键,则结果将不可预测并且几乎不会得到预期的结果。

文件和 cmdlet 名称完成

若要从可用选择中自动填充文件名或路径,键入部分名称并按下 Tab 键。 PowerShell 会自动将名称扩展至找到的第一个匹配项。 重复按下 Tab 将循环浏览所有可用选择。

名称的 Tab 键扩展稍有不同。 若要在 cmdlet 名称上使用 Tab 键扩充,键入名称的整个第一部分(即谓词),然后是后跟的连字符。 你可以填入名称的更多内容以进行部分匹配。 例如,如果键入 get-co 然后按 Tab 键,PowerShell 会自动将其扩展为 Get-Command cmdlet(注意,还会将字母的大小写改为标准形式)。 如果再次按 Tab 键,PowerShell 会将此替换为另一个唯一匹配的 cmdlet 名称 Get-Content

注意

自 PowerShell 7.0 起,Tab 还将展开缩略形式的 cmdlet 和函数。 例如,i-psdf<tab> 返回 Import-PowerShellDataFile

Tab 补全还可用于解析 PowerShell 别名和本机可执行文件。

你可以在同一行上重复使用 Tab 键扩展。 例如,可以通过输入以下内容在 Get-Content cmdlet 的名称上使用 tab 扩展:

示例

PS> Get-Con<Tab>

当你按下 Tab 键时,该命令扩展为:

PS> Get-Content

然后你可以部分指定“智能安装”日志文件的路径并再次使用选项卡扩展:

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

当你按下 Tab 键时,该命令扩展为:

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

PSReadLine 还具有菜单完成功能。 Windows 上的默认键绑定为 Ctrl-Space

PS> fore<Ctrl-Space>

Ctrl-空格键时,PowerShell 会以菜单的形式显示匹配值的完整列表:

PS> foreach
foreach         ForEach-Object  foreach.cmd

在此示例中,字符串“fore”与 foreach (PowerShell 别名) 匹配, ForEach-Object (cmdlet) , (foreach.cmd 本机命令) 。 使用箭头键选择所需的值。

参数参数完成

制表符补全也可以用于完成参数参数。 这允许使用 Tab 键循环浏览对某些参数有效的可能值列表。

有关详细信息,请参阅 about_Functions_Argument_Completion

枚举值完成

从 PowerShell 7.0 开始,添加了对枚举的 Tab 补全支持。 可以在使用枚举的任意位置使用 Tab 补全来选择所需的值。 例如:

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

[Suits]$suit = 'c<Tab>

枚举值是字符串,因此要完成的值必须以单引号或双引号字符开头。

点击 Tab 键时,将得到以下结果:

[Suits]$suit = 'Clubs'

Tab 补全也适用于 .NET 枚举。

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

Tab 键两次循环浏览以字母“S”开头的两个值。 最终结果是:

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

从 PowerShell 7.0 开始,在分配给变量时,为 的值 ValidateSet 添加了选项卡扩展。 例如,如果要键入以下变量定义:

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

点击 Tab 键时,将得到以下结果:

$flavor = 'Chocolate'

另请参阅