Você pode substituir a função de conclusão de tabulação padrão por conta própria. Na versão mais recente do PowerShell, essa função é TabExpansion2
. Esta modificação parece fazer o que você quer:
Function TabExpansion2 {
[CmdletBinding(DefaultParameterSetName = 'ScriptInputSet')]
Param(
[Parameter(ParameterSetName = 'ScriptInputSet', Mandatory = $true, Position = 0)]
[string] $inputScript,
[Parameter(ParameterSetName = 'ScriptInputSet', Mandatory = $true, Position = 1)]
[int] $cursorColumn,
[Parameter(ParameterSetName = 'AstInputSet', Mandatory = $true, Position = 0)]
[System.Management.Automation.Language.Ast] $ast,
[Parameter(ParameterSetName = 'AstInputSet', Mandatory = $true, Position = 1)]
[System.Management.Automation.Language.Token[]] $tokens,
[Parameter(ParameterSetName = 'AstInputSet', Mandatory = $true, Position = 2)]
[System.Management.Automation.Language.IScriptPosition] $positionOfCursor,
[Parameter(ParameterSetName = 'ScriptInputSet', Position = 2)]
[Parameter(ParameterSetName = 'AstInputSet', Position = 3)]
[Hashtable] $options = $null
)
End
{
$source = $null
if ($psCmdlet.ParameterSetName -eq 'ScriptInputSet')
{
$source = [System.Management.Automation.CommandCompletion]::CompleteInput(
<#inputScript#> $inputScript,
<#cursorColumn#> $cursorColumn,
<#options#> $options)
}
else
{
$source = [System.Management.Automation.CommandCompletion]::CompleteInput(
<#ast#> $ast,
<#tokens#> $tokens,
<#positionOfCursor#> $positionOfCursor,
<#options#> $options)
}
$field = [System.Management.Automation.CompletionResult].GetField('completionText', 'Instance, NonPublic')
$source.CompletionMatches | % {
If ($_.ResultType -eq 'Command' -and [io.file]::Exists($_.ToolTip)) {
$field.SetValue($_, [io.path]::GetFileNameWithoutExtension($_.CompletionText))
}
}
Return $source
}
}
Eu adicionei as linhas depois da que começa com $field
; ele percorre as opções de conclusão da guia padrão e remove a extensão daquelas que parecem ser do seu PATH
. Eu tenho a fonte original com este comando:
(Get-Command 'TabExpansion2').ScriptBlock
Se você colocar a nova função em um arquivo .ps1
e executar um ponto com esse script (por exemplo, . .\tabnoext.ps1
), ele se tornará o manipulador de conclusão da guia para a sessão atual. Para carregá-lo sempre que você abrir uma janela do PowerShell, cole todo esse código em um script de perfil do PowerShell .
Se você estiver em uma versão antiga do PowerShell, será necessário substituir as TabExpansion
function, que apenas retorna um array de strings.