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

nnvyjq4y  于 2022-12-13  发布在  Shell
关注(0)|答案(8)|浏览(130)

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

buildBar.bat
buildFoo.bat
buildHouse.bat

在命令提示符下键入以下命令:./bu,然后键入TAB。

  • 在Bash中,它被扩展为./build
  • 在PowerShell中,它被扩展为./buildBar.bat--列表中的第一项。
  • 在Cmd中,行为与PowerShell相同。

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

xmd2e60i

xmd2e60i1#

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

Set-PSReadlineKeyHandler -Key Tab -Function Complete

或者,使其更像bash,您可以使用箭头键导航可用选项:

Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete

要使其永久化,请将此命令放入powershell配置文件中,该配置文件由$PROFILE(通常为C:\Users\[User]\Documents\WindowsPowerShell\profile.ps1)定义。

wpcxdonn

wpcxdonn2#

现在可以使用PSReadline让PowerShell执行Bash风格的完成。
查看博客文章 Bash-like tab completion in PowerShell

mklgxw1f

mklgxw1f3#

tab仅完成命令名,而不完成其前面的自变量/参数。
要同时用历史记录中的参数自动完成complete命令,请设置下面的键绑定。

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

现在,键入命令名称的几个字符,并使用向上/向下箭头从历史记录中自动完成此命令(带参数)。
真实的时间。*
查看更多:Power up your PowerShell

3pmvbmvn

3pmvbmvn4#

看看这里,不是真正的你渴望:
PowerTab
但我认为这是PowerShell控制台最好的选项卡扩展功能!!!

ggazkfy8

ggazkfy85#

# 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
os8fio9y

os8fio9y6#

修改TabExpansion函数以达到你想要的效果。记住,如果你再次按tab键,它可能会一直完成到最后,新的建议是从你最初按下键的地方修改。我强烈倾向于实际的行为,我希望行写得尽可能快。最后不要忘记通配符扩展,例如:bu*h[Tab]自动完成到buildHouse.bat

7cwmlq89

7cwmlq897#

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

6uxekuva

6uxekuva8#

实际上,bash行为是由/etc/inputrc控制的,而/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

相关问题