155

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

buildBar.bat
buildFoo.bat
buildHouse.bat

我在命令提示符下键入以下内容,./bu然后TAB.

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

  • 在 PowerShell 中,它被扩展为./buildBar.bat列表中的第一项。

  • 在 Cmd 中,行为与 PowerShell 相同。

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

4

8 回答 8

255

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

Set-PSReadlineKeyHandler -Key Tab -Function Complete

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

于 2016-06-09T00:51:41.110 回答
29

现在可以使用 PSReadline 让 PowerShell 执行 Bash 样式的补全。

查看博文 Bash-like tab completion in PowerShell

于 2012-11-08T15:43:41.943 回答
25

tab仅完成命令名称而不是其先前的参数/参数。

要使用历史记录中的参数自动完成完整的命令,请设置以下键绑定。

Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward

现在,键入命令名称的几个字符并使用向上/向下箭头从历史记录中自动完成此命令(带参数)。

实时节省。


查看更多:启动您的 PowerShell

于 2019-12-14T11:50:50.703 回答
15

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

电源选项卡

但我认为这是 PowerShell 控制台的最佳选项卡扩展功能!!!

于 2011-11-25T06:13:06.643 回答
12
# 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
于 2020-07-18T04:41:54.853 回答
5

修改 TabExpansion 函数来实现你想要的。请记住,如果您再次按 Tab 键,新建议可能会从您最初按键的位置修改,可能会完成到最后。我非常喜欢实际的行为,我希望尽可能快地写出这行代码。最后别忘了通配符扩展,例如:bu*h[Tab]自动补全到buildHouse.bat

于 2011-11-25T12:18:53.090 回答
4

使用 Powershell Core,我们可以将 PSReadLine 的 PredictionSource 属性设置为History以获取自动建议。有关详细信息,请参阅 YouTube 视频 https://youtu.be/I0iIZe0dUNw

于 2020-07-08T00:06:33.273 回答
0

实际上,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
于 2022-01-01T20:55:37.457 回答