在 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-* 参数添加 Tab 补全
  • 添加对基于类的参数补全器的支持

PowerShell 7.3

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

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

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

ValidateSetArgumentCompletions 属性与参数结合使用

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

有关详细信息,请参见:

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

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

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

Register-ArgumentCompleter cmdlet 在运行时将脚本块注册为指定命令的参数补全函数。 通过使用 Register-ArgumentCompleter ,可以在脚本或模块之外定义参数补全器,或者用于本地命令。 有关详细信息,请参阅 Register-ArgumentCompleter

PSReadLine 中的预测性智能感知

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

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

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