按下箭头键时,vim终端模式被取消

按下箭头键时,vim终端模式被取消,vim,Vim,使用vim的终端模式(通过:term访问)时,如果我输入两个双引号,然后按左键(例如,如果您要键入git commit-m”“,然后返回一个字符以开始消息),则会发生以下情况: 终点站关闭了 将在缓冲区中的光标上方添加新行 进入插入模式 插入字符D 确切的类型化序列是:termgit commit-m”“ 为什么会发生这一系列事件?我如何防止将来发生这一事件?事实证明,在某些终端中,箭头键用转义键序列表示,例如用Esc O D表示的左箭头。在我的vimrc中,我有映射tnoremap:q当我按下

使用vim的终端模式(通过
:term访问)时,如果我输入两个双引号,然后按左键(例如,如果您要键入
git commit-m”“
,然后返回一个字符以开始消息),则会发生以下情况:

  • 终点站关闭了
  • 将在缓冲区中的光标上方添加新行
  • 进入插入模式
  • 插入字符
    D
  • 确切的类型化序列是
    :termgit commit-m”“


    为什么会发生这一系列事件?我如何防止将来发生这一事件?

    事实证明,在某些终端中,箭头键用转义键序列表示,例如用Esc O D
    表示的左箭头。在我的vimrc中,我有映射
    tnoremap:q当我按下退出键时,它是用来关闭终端的。但是由于vim如何解释我的箭头键序列,当我按下任何箭头时,它会关闭终端。我通过将映射更改为
    tnoremap:q解决了这个问题


    关于这个错误的更多背景信息可以在这里找到:

    原因不清楚,但是由左箭头键(
    ^[OD
    )发送的转义序列没有被传输到终端中的外壳,而是由Vim本身处理。我无法复制这个问题(使用Vim 8.0和补丁1-1453)在Windows 10上的Windows Subsystem for Linux上。当我尝试时,它就像预期的那样工作。您的终端中箭头键的设置可能有问题…不确定它到底是什么。但是尝试使用
    作为解决方法,它应该相当于左箭头:
    :termgit commit-m”“