在 shell 中使用 Tab 键补全

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

Tab 键是 Windows 上的默认键绑定。 PSReadLine 还提供一个绑定到 Ctrl+空格 的函数。 该 MenuComplete 函数在命令行下方显示匹配完成的列表。

可以使用 PSReadLine cmdlet 或托管 PowerShell 的应用程序更改这些密钥绑定。 非 Windows 平台上的键绑定可能有所不同。 有关详细信息,请参阅 about_PSReadLine_Functions

内置Tab键补全功能

PowerShell 为命令行体验的许多方面启用了选项卡完成功能。

文件名完成

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

命令和参数名称补全

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

下图显示了选项卡和菜单补全的示例。

选项卡和菜单完成示例

其他选项卡补全改进

每个新版本的 PowerShell 都包含对标签补全功能的改进,从而修复错误并提高可用性。

PowerShell 7.0

  • Tab 键补全功能用于解析枚举或类型受限的变量赋值
  • Tab 键补全用于扩展缩写的 cmdlet 和函数。 例如, i-psdf<tab> 返回 Import-PowerShellDataFile

PowerShell 7.2

  • 修复未本地化about*主题的选项卡完成问题
  • 修复在完成时被视为位置参数的散点
  • 添加对基于注释的帮助关键字的补全功能
  • #Requires 语句添加完成
  • 为 cmdlet 的 Format-*View 参数添加 Tab 补全
  • 添加对基于类的参数补全器的支持

PowerShell 7.3

  • 修复为 ValidateScriptAttribute 指定的脚本块中的自动完成功能问题。
  • breakcontinue 之后添加了循环标签的选项卡补全
  • 在多个场景中改进哈希表的完成度
    • 参数散点
    • 参数Invoke-CimMethod
    • FilterHashtable 参数 Get-WinEvent
    • CIM cmdlet 的属性参数
    • 从成员完成方案中删除重复项
  • 支持在网络共享路径(UNC路径)中使用正斜杠完成
  • 改进成员自动完成
  • 确定参数枚举的完成优先级ValidateSet
  • 添加对具有类型参数的泛型方法的类型推理支持
  • 改进类型推理和代码补全
    • 允许显示方法在 ForEach-Object -MemberName 的完成结果中
    • 防止返回 void 的表达式的完成,如 ([void]("")
    • 允许在类完成基于 AST 的情况下,显示非默认的 Class 构造函数。

增强命令参数选项卡完成的其他方法

内置选项卡扩展由内部函数 TabExpansionTabExpansion2 控制。 可以创建替换这些函数的默认行为的函数或模块。 可以通过搜索 TabExpansion 关键字在 PowerShell 库中查找示例。

ValidateSetArgumentCompletions 属性与参数结合使用

ArgumentCompletions 属性允许向特定参数添加制表符完成值。 该 ArgumentCompletions 属性类似于 ValidateSet. 当用户在参数名称后面按 Tab 时,这两个属性都会显示值列表。 但是,不像 ValidateSet那样,值不会被验证。

有关详细信息,请参见:

使用 ArgumentCompleter 属性或带有参数的 Register-ArgumentCompleter

参数完成器是一个脚本模块或函数,它为参数值提供动态的选项卡完成。

ArgumentCompleter 特性允许注册一个函数,该函数为参数提供选项卡完成值。 参数完成函数必须可用于包含带有 ArgumentCompleter 属性参数的函数。 通常,函数在同一脚本或模块中定义。

有关详细信息,请参阅 ArgumentCompleter

Register-ArgumentCompleter cmdlet 在运行时将脚本块注册为指定命令的参数补全函数。 这使您能够在脚本或模块之外,或为原生命令定义参数完成程序。 有关详细信息,请参阅 Register-ArgumentCompleter

PSReadLine 中的预测性智能感知

PSReadLine 2.1.0 引入了 预测 IntelliSense 功能。 预测 IntelliSense 根据 PSReadLine 历史记录中的项提供完整的命令建议。

PSReadLine 2.2.2 通过添加对使用高级逻辑提供完整命令建议的插件模块的支持,扩展了预测 IntelliSense 的强大功能。 Az.Tools.Predictor 模块是预测 IntelliSense 的第一个插件。 它使用机器学习来预测要运行的 Azure PowerShell 命令以及要使用的参数。

有关详细信息,请参阅 使用预测器