如何禁用/调整 PowerShell 中特定功能的制表符补全行为?

如何禁用/调整 PowerShell 中特定功能的制表符补全行为?

假设我编写了一个函数,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。MenuCompletePossibleCompletionsViTabCompleteNext

相关内容