在 Vi-Mode 的 PSReadline 中重新绑定转义符

itm*_*kel 7 powershell psreadline

我已经为 PowerShell 安装了 PSReadline 模块,以便从 PowerShell 中的 Bash 获取按键绑定。我启用了 Vi-Mode,效果很好。

问题是:在 Vim 中我总是使用 j, k 退出插入模式。这意味着:我首先快速输入 j,然后输入 k。如果我真的想输入 j 和 k,那么我只需在输入 j 后等待超时即可。

如何在 PSReadline 的 Vi-Mode 中执行相同操作?我已经尝试过:Set-PSReadlineKeyHandler -Chord 'j', 'k' ViCommandMode,但后来我无法输入jk了。有任何想法吗?

小智 1

为此,请将以下内容放入您的 $Profile 中:

Set-PSReadLineKeyHandler -Chord 'j' -ScriptBlock {
  if ([Microsoft.PowerShell.PSConsoleReadLine]::InViInsertMode()) {
    $key = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    if ($key.Character -eq 'k') {
      [Microsoft.PowerShell.PSConsoleReadLine]::ViCommandMode()
    }
    else {
      [Microsoft.Powershell.PSConsoleReadLine]::Insert('j')
      [Microsoft.Powershell.PSConsoleReadLine]::Insert($key.Character)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,这可能会导致粘贴“j”时出现问题。