为什么参数选项卡自动完成结果默认显示提供程序(例如文件系统)对象?

问题描述 投票:0回答:1

您可以通过多种不同的方式定义参数值的自动完成结果,例如使用动态参数、参数的 ArgumentCompleter 属性声明中的 CompletionResult 类、ValidateSet 属性等。

如果未声明制表符补全结果,则 PowerShell(默认情况下)将返回参数值自动补全建议的提供者对象/项目的上下文列表(无论是使用

Tab
CTRL+SPACE
进行“自动完成”)。


例如,在

CTRL+SPACE
之后按
Test -ParamName
将显示文件系统对象列表。



我知道

CTRL+SPACE
是 PSReadLine 的 MenuComplete 函数在工作,但即使删除 PSReadLine,在使用
Tab
自动完成参数值时,返回上下文提供程序对象的默认行为仍然存在。

此默认行为/首选项(返回提供程序对象)是否在任何地方公开,例如自动变量、.NET 类属性/字段、.ps1xml 文件等?

powershell intellisense psreadline
1个回答
0
投票

这是

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
© www.soinside.com 2019 - 2024. All rights reserved.