如何使PowerShell选项卡完成像Bash一样工作

如何使PowerShell选项卡完成像Bash一样工作,powershell,cmd,tab-completion,Powershell,Cmd,Tab Completion,假设我的当前目录中有以下文件: buildBar.bat buildFoo.bat buildHouse.bat 我在命令提示符下键入以下命令,/bu,然后键入TAB 在Bash中,它被扩展为/build 在PowerShell中,它将扩展到列表中的第一项 在Cmd中,行为与PowerShell相同 我更喜欢Bash行为-有没有办法让PowerShell表现得像Bash一样?看看这里,这不是你真正想要的: 但我认为这是PowerShell控制台最好的标签扩展功能 修改TabExpansi

假设我的当前目录中有以下文件:

buildBar.bat
buildFoo.bat
buildHouse.bat
我在命令提示符下键入以下命令,
/bu
,然后键入TAB

  • 在Bash中,它被扩展为
    /build

  • 在PowerShell中,它将扩展到列表中的第一项

  • 在Cmd中,行为与PowerShell相同


我更喜欢Bash行为-有没有办法让PowerShell表现得像Bash一样?

看看这里,这不是你真正想要的:


但我认为这是PowerShell控制台最好的标签扩展功能

修改TabExpansion函数以实现所需功能。请记住,如果您再次按tab键,新建议可能会从原来的按键位置修改,直到结束。我非常喜欢实际的行为,我希望这行写得尽可能快。最后,不要忘记通配符扩展,例如:bu*h[Tab]自动完成buildHouse.bat

现在可以使用PSReadline让PowerShell完成Bash样式的完成


查看日志。

PowerShell的新版本包括PSReadline,可用于执行以下操作:

Set-PSReadlineKeyHandler -Key Tab -Function Complete

若要使其永久化,请将此命令放入C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1。

选项卡
仅完成命令名,而不是其先前的参数/参数

要使用历史记录中的参数自动完成complete命令,请设置以下keybinding

Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward
现在,键入命令名的几个字符,并使用上/下箭头从历史记录中自动完成此命令(带参数)


实时保存程序。

使用Powershell Core,我们可以将PSReadLine的PredictionSource属性设置为History,以获得自动建议。有关更多详细信息,请参阅YouTube视频

很有趣。如果有一种方法可以做到这一点,那么很有可能使扩展像bash一样工作。不过,我远不是PowerShell方面的专家,所以可能会遗漏一些东西。当然!开始学习PowerTab模块的代码,尝试满足您的扩展需求。但是PowerTab提供了对几乎任何命令、wmi、comobject和程序集的扩展,并且具有简单的选择方式!修改TabExpansion函数可能是一条路要走,但仍然比我想要的要复杂得多。我想我需要更流利地使用powershell,然后才能处理这个问题。是的,这是我在过去十年左右一直在做的事情,但我正在尝试过渡到powershell,因为我希望能够在没有安装Cygwin的系统以外的系统上使用命令行。博客中的链接已断,然而,在一天结束时,它会给您带来一个现在已经存在的问题,您可以使用一行程序来完成此操作,如下所述:
MenuComplete
而不是
Complete
更像bash,它允许您使用箭头键从可用选项中进行选择options@LeBleu真奇怪,因为我的全新Windows 10机器附带了PSReadline。我认为该模块来自Microsoft.BTW,如果您的计算机上不存在profile.ps1文件,您可以使用命令
new item$profile-itemtype file-force
生成一个。您的计算机很可能没有
C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1。
您实际上需要运行
新项目$profile-itemtype file-force
,这对于
触摸操作来说是一个非常不方便的拼写:-(
# keep or reset to powershell default
Set-PSReadlineKeyHandler -Key Shift+Tab -Function TabCompletePrevious

# define Ctrl+Tab like default Tab behavior
Set-PSReadlineKeyHandler -Key Ctrl+Tab -Function TabCompleteNext

# define Tab like bash
Set-PSReadlineKeyHandler -Key Tab -Function Complete