PowerShell 键盘快捷键

PowerShell 键盘快捷键

目前我正在通过 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

相关内容