当使用 vim 的终端模式(通过 :term
访问)时,如果我输入两个双引号然后按左箭头键(例如,如果您要输入 git commit -m ""
,然后返回一个字符以开始消息),会发生以下情况:
- 终端被关闭。
- 在缓冲区光标上方添加了一行。
- 进入插入模式。
- 插入字符
D
。
确切的输入序列是 :term<cr>git commit -m ""<left>
为什么会发生这一系列事件,以及如何防止它在将来发生?
当使用 vim 的终端模式(通过 :term
访问)时,如果我输入两个双引号然后按左箭头键(例如,如果您要输入 git commit -m ""
,然后返回一个字符以开始消息),会发生以下情况:
D
。确切的输入序列是 :term<cr>git commit -m ""<left>
为什么会发生这一系列事件,以及如何防止它在将来发生?
Esc O D
表示。在我的 vimrc 文件中,我有一个映射命令 tnoremap <esc> <c-w>:q!<cr>
,意思是当我按下 Escape 键时关闭终端。但由于 vim 如何解释我的箭头键序列,当我按下任何箭头键时它都会关闭终端。我通过将映射更改为 tnoremap <esc><esc> <c-w>:q!<cr>
来解决这个问题。
^[OD
)没有被传输到终端中的 shell,而是被 Vim 自己处理了。 - chepner<C-b>
作为解决方法,它应该相当于左箭头::term<cr>git commit -m ""<C-b>
。 - filbranden