Możesz zastąpić standardową funkcję wypełniania zakładki własną. W najnowszej wersji PowerShell ta funkcja jest TabExpansion2
. Ta modyfikacja wygląda tak, jak chcesz:
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
}
}
Dodałem wiersze po tym, który zaczyna się od $field
; przechodzi przez domyślne opcje uzupełniania kart i blokuje rozszerzenie poza tymi, które wydają się być z twojego PATH
. Dostałem oryginalne źródło za pomocą tego polecenia:
(Get-Command 'TabExpansion2').ScriptBlock
Jeśli umieścisz nową funkcję w a .ps1
plik i wykonaj kropkę tego skryptu (np. . .\tabnoext.ps1
), stanie się programem obsługi kart dla bieżącej sesji. Aby załadować go za każdym razem, gdy otworzysz okno PowerShell, po prostu wklej cały ten kod do Skrypt profilu PowerShell .
Jeśli używasz starej wersji PowerShell, musisz zastąpić TabExpansion
funkcja, która po prostu zwraca tablicę ciągów.
cmd
również uzupełnia się o rozszerzenia plików. Tak właśnie działają rzeczy.