【问题标题】:Is it possible to configure tab completion with PowerTab for aliased functions?是否可以使用 Power Tab 为别名功能配置选项卡完成?
【发布时间】:2013-02-13 16:05:07
【问题描述】:

我为 Micrsosoft TFS 和 Micrsosoft TFPT 命令行工具编写了一组 PowerShell 辅助函数(其中一些又使用 TFPT 中包含的 Posh cmdlet)。为了缩短命令的标准命名约定,例如Get-TfsStatusInvoke-TfsCommit,我还创建了别名(例如tf-statustf-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 函数的命名标准。

【问题讨论】:

  • @JasonMArcher 我们需要你的帮助 :-)

标签: powershell command-line powershell-2.0 powertab


【解决方案1】:

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

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

Get-Command -CommandType Alias,Function,ExternalScript,Filter,Cmdlet -Name "$($Matches[1])*" |

【讨论】:

  • 完美运行!请注意,我在 CodePlex 最新的第 1056 行更改了它,因为我正在运行 Posh v3 并且需要更新版本。
【解决方案2】:

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

Import-Module <<path_to_your_module>> -DisableNameChecking

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

默认情况下,自动完成对别名起作用。有效的,即使对于别名,是参数完成。所以不管你输入tf-status -a还是Get-TfsStatus -a,如果你按Tab,它会自动补全到-All

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

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

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

【讨论】:

  • 我应该提到它,但我知道-DisableNameChecking。不过,我属于阵营,认为命名标准的存在是有原因的。标准的 Posh 控制台实际上会自动完成别名。我通过输入tf-[TAB] 对其进行了测试。它完成了第一个,这是错误的,但它确实做到了。因此,如果键入更多命令,则更接近于选择正确的命令。最后,我不关心其他开发者。我们有受版本控制的 PowerTab,我们都使用相同的配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2011-11-08
  • 1970-01-01
  • 2021-10-20
相关资源
最近更新 更多