目前我正在通过 MSYS2 在 Windows 上使用 Bash。我有这个文件.inputrc
:
"\33[1;3A": "cd ..\n"
每当我按下 Alt Up Arrow 时,它都会移动到父目录。PowerShell 是否有类似的方法来映射快捷方式?
答案1
是的,Windows 10 上的 PowerShell 使用“PSReadline”,它在许多方面模仿了 bash 的 Readline(尽管不如 ~/.inputrc 简洁)。该模块也可安装在较旧的 Windows 上。
但是,我实际上还没有成功绑定 Alt+UpArrow - 即使我调用 [System.Console]::ReadKey() 也不会为其生成任何事件 - 因此您可能不得不使用 Ctrl。
您可以使用以下方式绑定按键设置PSReadLineKeyHandler,无论是熟悉的PSReadline 操作或者自定义 PowerShell 函数:
Set-PSReadLineKeyHandler -Chord Ctrl+UpArrow -ScriptBlock {
[Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
[Microsoft.PowerShell.PSConsoleReadLine]::Insert("cd ..")
[Microsoft.PowerShell.PSConsoleReadLine]::AcceptLine()
}
总的来说,这类似于在 ~/.bashrc 中使用“bind”命令,为了使这种绑定持久,您需要将它们放在 PowerShell 中配置文件脚本,地址为$Profile
:
PS> $Profile.CurrentUserAllHosts
C:\Users\Me\Documents\WindowsPowerShell\profile.ps1
PS> $Profile.CurrentUserCurrentHost
C:\Users\Me\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
答案2
另一个答案很好,但这似乎也有效:
Set-PSReadLineKeyHandler Ctrl+UpArrow {
Set-Location ..
[Microsoft.PowerShell.PSConsoleReadLine]::InvokePrompt()
}
https://docs.microsoft.com/PowerShell/module/psreadline/Set-PSReadlineKeyHandler
答案3
要将按键处理程序绑定到Alt+key
组合键,请添加此环境变量PSREADLINE_VTINPUT=1
。请参阅此GitHub 问题了解详细信息。请注意,可能会导致 Ctrl 键不起作用。
这里有一个其他评论没有提到的例子当您向上移动目录时,您将到达根目录并且命令会失败,因此要解决这个问题,请将命令括在 try-catch 块中。
Set-PSReadLineKeyHandler -Key 'Alt+UpArrow' -ScriptBlock {
[Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
try { Set-Location .. }
catch { return }
[Microsoft.PowerShell.PSConsoleReadLine]::AcceptLine()
}
使用 try 块定义脚本中希望 PowerShell 监视错误的部分。当 try 块内发生错误时,错误首先保存到 $Error 自动变量中。
还要确保您拥有读取行Get-Module
通过在 PowerShell 中运行安装的模块。
将更多自定义键/和弦绑定到处理程序
- 在 PowerShell 中输入
Alt+?
并按下键来记下键/和弦的字符串,它还会返回 Chord 绑定到的函数(如果有)。 - 输入
Get-PSReadLineKeyHandler
以查找所有已经可用的键及其功能。 - 要将功能绑定到自定义键,请将此行添加到您的PowerShell 配置文件,将 <key> 替换为您记下的键,并将 <function> 替换为之前返回的任何函数。
Set-PSReadLineKeyHandler -Key '<key>' -Function <function>
- 您还可以找到更多未与此命令绑定的功能
Get-PSReadLineKeyHandler -Unbound