我为Micrsosoft TFS和Micrsosoft TFPT命令行工具编写了一组PowerShell辅助函数(其中一些工具又使用了TFPT附带的Posh cmdlet)。为了缩短标准命名约定中的命令,例如Get-TfsStatus
和Invoke-TfsCommit
,我也创建了别名(例如tf-status
和tf-commit
)。我也使用PowerTab进行选项卡完成,但默认情况下v0.99.6不支持使用别名完成选项卡。
如何配置制表符完成,以便所有以tf-
开头的别名可以显示可用命令列表?
我看到PowerTab包含一个用于修改标签扩展行为的编辑器,但我不清楚我需要配置什么。我也知道PowerTab关闭后,默认的豪华标签完成与别名一起使用。
示例函数和别名:
function Get-TfsStatus([switch]$all) {
# Do something
}
Set-Alias tf-status Get-TfsStatus
Set-Alias tf-st Get-TfsStatus
注意:最初,我的实际函数名称为tf-status
,tf-commit
等,但当您Import-Module
时,PowerShell会抱怨我没有遵循PowerShell的命名标准功能
答案 0 :(得分:1)
首先,您可以使用非标准名称,而不会收到警告。
Import-Module <<path_to_your_module>> -DisableNameChecking
虽然根据经验,遵循(在大多数情况下)命名惯例是一个好习惯。
默认情况下,自动填充不对别名有效。什么工作,甚至是别名,是参数完成。因此,无论您键入tf-status -a
还是Get-TfsStatus -a
,如果按Tab键,它都会自动填充到-All
。
Powershell控制台和ISE编辑器都没有选项来启用别名完成。
有关你的情况,我建议使用“错误”的名称(无别名),进口与-DisableNameChecking
,然后自动完成会为工作tf-status
关于PowerTab - 并非所有主机都支持此功能。检查this page以查看支持哪些功能。我不太清楚 - 我确信可以添加别名,但这可能是一项繁琐的任务,需要为每个用户完成。如果有人没有powertab,他们将无法使用您在模块中定义的别名自动完成。
答案 1 :(得分:1)
这不是我预期的用例,所以它得不到很好的支持。但是,只要您的别名继续在其名称中包含“ - ”,就有一种简单的方法可以解决此问题。
修改 TabExpansionCore.ps1 的第957行,将“别名”添加到命令类型列表中。
Get-Command -CommandType Alias,Function,ExternalScript,Filter,Cmdlet -Name "$($Matches[1])*" |