假设我编写了一个函数,Foo-Rab
它使用了一个辅助函数,Foo-Bar
该函数具有非常具体的用途,不打算单独使用。我已将这些函数的代码放入我的配置文件中,这样我就可以输入Foo-
并按 Tab 键自动完成它们的名称。但是,第一个结果是Foo-Bar
,我从未打算以这种方式使用它;我必须按两次 Tab 键才能获得Foo-Rab
我真正想要的函数。
理想情况下,我想Foo-Bar
完全禁用 Tab 补全。如果这不可能,那么如何才能在Foo-Rab
不更改任一函数名称的情况下让其首先出现?
答案1
你想要一个私人的函数用于隐藏通用 shell 中的辅助函数 - 语法对变量有用Function Private:MyFunction
。$Private:Foo
下面是一个定义这两种类型的示例:
# Create a function you can run directly
Function Do-Foo ($Foo) {
$Private:Bar = $Foo+$Foo
Write-Output "Top level Foo is $Foo"
Write-Output "Top level Bar is $Bar"
# Create a helper function
Function Private:Do-Bar {
Write-Output "Child Foo is $Foo"
Write-Output "Child Bar is $Bar" # Can't be used since it was private
}
# Can be used by function Do-Foo, but not by you!
Do-Bar
}
如果您将其添加到您的个人资料中或只是正常运行它,您将能够Do-Foo
像平常一样进行制表符完成,但您甚至无法运行Do-Bar
:
PS C:\> Do-Foo -Foo 1
Top level Foo is 1
Top level Bar is 2
Child Foo is 1
Child Bar is
PS C:\> Do-Bar
Do-Bar : The term 'Do-Bar' is not recognized as the name of a cmdlet, Function, ...
成功!
除此之外,Powershell 的 tab-complete 功能默认只是按字母顺序排列。在较新版本的 powershell 中,可以使用 PSReadLine 进行更改:
# The default setting:
Set-PSReadLineKeyHandler -Key Tab -Function TabCompleteNext
有很多不同的内置选项,我认为您可能会感兴趣的是、、Complete
或。我使用的是 PSReadLine 版本 2.2.0。MenuComplete
PossibleCompletions
ViTabCompleteNext