PS 当前的行为是先完成第一个条目,然后在后续的选项卡中浏览其他条目。如果我有数十个条目与我输入的第一个字符匹配,我现在可以:
- 一直跳到找到我需要的那个为止,或者
- 删除长名字,在我按下 Tab 键之前写更多的字母。
所有这些都非常低效。有没有办法让它像在 bash 中一样在出现歧义完成时停止?
答案1
据我所知,没有办法在本机上执行您所要求的操作。Bash 有这个,因为 Bash 团队出于某种原因选择添加它,尽管 PS 有许多类似 Linux 的别名,但 PS 格式是另一回事。我不知道有任何努力使 PS 像 bash 一样运行。PS 是基于对象的,而 Bash 等是基于字符串的。
如果您认为这应该成为现实,请向 PS GitHub uservoice 网站提交请求。然而,我从未在 uservoice 或其他与 MS PS 团队沟通的类似网站上看到过这种事情。
您可以更改列表显示的一些方式,例如显示垂直宽列表,例如 emacs 外观。您可以通过在 PS 配置文件中设置 PSReadline 选项来执行此操作,并且有很多使用 PSReadline 的选项,但这仅适用于 PS 控制台主机,而不适用于 ISE(并且没有地方可以这样做)或 VSCode 集成控制台(ISE 的替代品,这里已经要求)。但是,由于您可以在 VSC 中并排打开多个终端,从而原生获得控制台主机,因此 PSReadline,据我所知,对于 VSC 集成控制台来说,它的优先级较低。
about_PSReadline
例如:
$FormatEnumerationLimit = -1
# PSReadline Options
Set-PSReadlineOption -EditMode Emacs
Set-PSReadlineOption -BellStyle None
Set-PSReadLineKeyHandler -Chord tab -Function Complete
您可以编写自己的包装器来执行类似操作,或者使用 Out-GridView 作为 GUI 来显示您的列表并从那里进行选择。
例如:
外网格视图 (Microsoft.PowerShell.Utility)
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/out-gridview
使用 Out-GridView 创建简单的 GUI 界面
https://mikefrobbins.com/2014/09/11/creating-a-simplistic-gui-interface-with-out-gridview
在 PowerShell 中使用 Out-GridView 创建 GUI
https://mcpmag.com/articles/2016/02/17/creating-a-gui-using-out-gridview.aspx
基本上,OGV< 会向您显示您的长列表,您可以从那里选择并将其显示在命令行中或分配给正在运行的脚本/函数中的变量等。
最后,请记住 PS 已经是 OSS 有一段时间了,如果您认为自己有能力添加它,那么请发出拉取请求并进行开发,然后提交回去看看它是否被接受。
OP 更新
出于好奇,我对此进行了进一步的挖掘(并且我不介意默认行为 - 好吧,我在日常工作中很少需要 bash。),将它放在你的 PS 配置文件中,应该会给你你想要的东西。
Set-PSReadlineKeyHandler -Key Tab -Function Complete
显示,使用 MS PSReadline 文档和本文...
使用 PowerShell-30 模拟 Bash-GNU-Readline
…这应该可以帮你到达那里。
哦,刚刚发现这个,它与您在这里询问的非常相似,并且指向我已经给出的相同信息。