假设我的当前目录中有以下文件:
buildBar.bat
buildFoo.bat
buildHouse.bat
我在命令提示符下键入以下内容,./bu
然后TAB.
在 Bash 中,它被扩展为
./build
在 PowerShell 中,它被扩展为
./buildBar.bat
列表中的第一项。在 Cmd 中,行为与 PowerShell 相同。
我更喜欢 Bash 行为 - 有没有办法让 PowerShell 表现得像 Bash?
假设我的当前目录中有以下文件:
buildBar.bat
buildFoo.bat
buildHouse.bat
我在命令提示符下键入以下内容,./bu
然后TAB.
在 Bash 中,它被扩展为./build
在 PowerShell 中,它被扩展为./buildBar.bat
列表中的第一项。
在 Cmd 中,行为与 PowerShell 相同。
我更喜欢 Bash 行为 - 有没有办法让 PowerShell 表现得像 Bash?
新版本的 PowerShell 包括 PSReadline,可用于执行此操作:
Set-PSReadlineKeyHandler -Key Tab -Function Complete
要使其永久化,请将此命令放入 C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1。
现在可以使用 PSReadline 让 PowerShell 执行 Bash 样式的补全。
tab
仅完成命令名称而不是其先前的参数/参数。
要使用历史记录中的参数自动完成完整的命令,请设置以下键绑定。
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward
现在,键入命令名称的几个字符并使用向上/向下箭头从历史记录中自动完成此命令(带参数)。
实时节省。
查看更多:启动您的 PowerShell
# 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
修改 TabExpansion 函数来实现你想要的。请记住,如果您再次按 Tab 键,新建议可能会从您最初按键的位置修改,可能会完成到最后。我非常喜欢实际的行为,我希望尽可能快地写出这行代码。最后别忘了通配符扩展,例如:bu*h[Tab]自动补全到buildHouse.bat
使用 Powershell Core,我们可以将 PSReadLine 的 PredictionSource 属性设置为History以获取自动建议。有关详细信息,请参阅 YouTube 视频 https://youtu.be/I0iIZe0dUNw
实际上,bash 行为由 控制/etc/inputrc
,不同发行版的差异很大。
因此,这里是如何使 PowerShell 的行为更像是具有健全默认值的 bash(Gentoo、CentOS)
# Press tab key to get a list of possible completions (also on Ctrl+Space)
Set-PSReadlineKeyHandler -Chord Tab -Function PossibleCompletions
# Search history based on input on PageUp/PageDown
Set-PSReadlineKeyHandler -Key PageUp -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key PageDown -Function HistorySearchForward
# If you feel cursor should be at the end of the line after pressing PageUp/PageDown (saving you an End press), you may add:
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
# Set-PSReadLineOption -HistorySearchCursorMovesToEnd:$False to remove