您可以通过多种不同的方式定义参数值的自动完成结果,例如使用动态参数、参数的 ArgumentCompleter 属性声明中的 CompletionResult 类、ValidateSet 属性等。
如果未声明制表符补全结果,则 PowerShell(默认情况下)将返回参数值自动补全建议的提供者对象/项目的上下文列表(无论是使用
Tab
或 CTRL+SPACE
进行“自动完成”)。
例如,在
CTRL+SPACE
之后按 Test -ParamName
将显示文件系统对象列表。
我知道
CTRL+SPACE
是 PSReadLine 的 MenuComplete 函数在工作,但即使删除 PSReadLine,在使用 Tab
自动完成参数值时,返回上下文提供程序对象的默认行为仍然存在。
此默认行为/首选项(返回提供程序对象)是否在任何地方公开,例如自动变量、.NET 类属性/字段、.ps1xml 文件等?
TabExpansion2
内置函数的默认行为,更具体地说,这是CommandCompletion.CompleteInput
方法的默认行为,当没有完成结果时,它将默认为当前位置的子项:
function Test-Completion {param($Param) }
# This is the simulated input:
$statement = 'Test-Completion '
# Should output the child items in the current location:
[System.Management.Automation.CommandCompletion]::CompleteInput(
$statement, $statement.Length, $null).
CompletionMatches
如果您想检查
TabExpansion2
函数的定义/覆盖其默认行为,您可以使用:
(Get-Command TabExpansion2).Definition