3

我为 Micrsosoft TFS 和 Micrsosoft TFPT 命令行工具编写了一组 PowerShell 辅助函数(其中一些又使用 TFPT 中包含的 Posh cmdlet)。为了缩短命令的标准命名约定,比如Get-TfsStatusand Invoke-TfsCommit,我还创建了别名(例如tf-statusand 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-statustf-commit等,但当你使用 时Import-Module,PowerShell 抱怨我没有遵循 PowerShell 函数的命名标准。

4

2 回答 2

2

这不是我预期的用例,因此没有得到很好的支持。但是,只要您的别名在其名称中继续带有“-”,就有一种简单的方法可以破解此问题。

编辑TabExpansionCore.ps1的第 957 行,将“别名”添加到命令类型列表中。

Get-Command -CommandType Alias,Function,ExternalScript,Filter,Cmdlet -Name "$($Matches[1])*" |
于 2013-03-09T07:14:20.090 回答
1

首先,您可以为您的函数使用非标准名称而不会收到警告。

Import-Module <<path_to_your_module>> -DisableNameChecking

尽管从经验来看,遵循(在大多数情况下)命名约定是一个好习惯。

默认情况下,自动完成功能不适用于别名。有效的,即使对于别名,是参数完成。因此,无论您键入tf-status -a还是Get-TfsStatus -a,如果您按 Tab,它都会自动完成到-All.

Powershell 控制台和 ISE 编辑器都没有启用别名完成的选项。

对于您的情况,我建议使用“错误”名称(无别名),导入,-DisableNameChecking然后自动完成将适用于tf-status.

关于 PowerTab——并非所有主机都完全支持。检查此页面以查看在何处支持哪些功能。我不太了解 - 我确信可以添加别名,但这可能是一项乏味的任务,需要为每个用户完成。如果有人没有 powertab,他们将无法对您在模块中定义的别名使用自动完成功能。

于 2013-03-03T09:28:16.410 回答