我已经为PowerShell安装了PSReadline模块,以便在PowerShell中从Bash获取Keybindings。我启用了Vi-Mode,它运行良好。
问题是:在Vim中我总是使用j,k来退出插入模式。这意味着:首先我输入j然后k非常快。如果我真的想输入j和k,那么我只需在输入j后等待超时。
如何在PSReadline的Vi模式下执行相同的操作?我已经尝试过:Set-PSReadlineKeyHandler -Chord 'j', 'k' ViCommandMode
,但我再也无法输入j
或k
了。有什么想法吗?
答案 0 :(得分: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)
}
}
}
但是,这可能会导致粘贴'j'时出现问题。
答案 1 :(得分:1)
我很惊讶这个问题没有得到普及。 Corben答案的问题在于,按下“ j”后,如果按下的下一个键是return或ctrl之类的修饰符,则会插入文字而不是您期望使用的键。
我重新编写了解决这两个问题的答案,并将其转换为使重用更加容易的功能(例如,在绑定两个不同的字母(例如jk)时)。
{($.errorCode="*UnauthorizedOperation") || (($.errorCode="AccessDenied*") && (($.userIdentity.type!="AssumedRole") || ($.userAgent!="[AWSConfig]")))}