当按下箭头键时,Vim终端模式被取消。

4

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

  1. 终端被关闭。
  2. 在缓冲区光标上方添加了一行。
  3. 进入插入模式。
  4. 插入字符 D

确切的输入序列是 :term<cr>git commit -m ""<left>

为什么会发生这一系列事件,以及如何防止它在将来发生?


2
不清楚为什么,但是左箭头键发送的转义序列(^[OD)没有被传输到终端中的 shell,而是被 Vim 自己处理了。 - chepner
我无法在Windows 10上的Linux子系统中复制该问题(使用带有1-1453补丁的Vim 8.0)。当我尝试时,它按预期工作。 - m_mlvx
你的终端中可能存在箭头键设置问题,具体原因不是很清楚。但是,可以尝试使用 <C-b> 作为解决方法,它应该相当于左箭头::term<cr>git commit -m ""<C-b> - filbranden
1个回答

3
原来在某些终端中,箭头键是用转义键序列表示的,例如左箭头用 Esc O D 表示。在我的 vimrc 文件中,我有一个映射命令 tnoremap <esc> <c-w>:q!<cr>,意思是当我按下 Escape 键时关闭终端。但由于 vim 如何解释我的箭头键序列,当我按下任何箭头键时它都会关闭终端。我通过将映射更改为 tnoremap <esc><esc> <c-w>:q!<cr> 来解决这个问题。
更多背景信息可以在此错误报告中找到: https://github.com/vim/vim/issues/2216#issuecomment-337566816

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接