在Vim中插入模式下的箭头键

时间:2020-04-27 21:54:26

标签: macos vim iterm2 iterm

当我在vim中处于插入模式并且使用箭头键时,它将发送看起来像字母和回车符的消息。例如,按会发送:

Ubuntu

看起来像A ,但是我不确定它要发送的是什么字符/代码。为什么会发生这种情况,有办法禁用它吗?

2 个答案:

答案 0 :(得分:3)

终端通常按向上箭头发送的序列是<Esc>OA^[OA^[序列代表<Esc>键,也等同于{{1} }。

如果您的Vim无法将此序列识别为向上箭头,它将最终执行以下序列:Ctrl+[将退出插入模式并进入普通模式,然后<Esc>插入一个新序列。在当前行上方插入一行并进入插入模式,然后插入文字O,因为您将再次处于插入模式。

在插入模式下,键入A,然后按向上箭头,可以确认这确实是您的终端发送Vim的顺序。 (在插入模式下,Ctrl+V将按字面意义插入下一个字符。)我希望您会看到插入了Ctrl+V序列。

然后您可以使用^[OA命令检查Vim 向上箭头的顺序。我希望您会看到类似的东西:

:set <Up>

({t_ku <Up> ^[OA 是与此上箭头键相对应的设置的内部名称。您也可以使用t_ku查看与终端相关的所有Vim设置,包括特殊键代码。)< / p>

如果其中任何一个都不符合期望,则可以解释为什么您的Vim无法识别向上箭头键。 (另一种解释是'ttimeoutlen'设置得太短了,但是我说这不太可能。)

这些设置通常由'term'设置管理。默认情况下,它是根据Vim外部shell上:set termcap所具有的内容来设置的。

您可以先查看Vim认为$TERM是什么,以及它的设置位置:

'term'

:verbose set term? term=screen-256color Last set from ~/.vimrc line 100 部分要求Vim告诉您它的设置位置,因此您将看到vimrc或其中一个插件是否覆盖了它。如果Vim没有显示任何内容,则表示它来自您外壳程序中的:verbose变量。

因此,请查看$TERM在Vim之外设置的内容,看是否正确。您是否在某个地方明确设置?是shell的初始化文件之一,还是终端仿真器本身的文件?

无论您使用的是tmux还是屏幕,都可能是相关的,在这种情况下,您应该仔细检查$TERM是否同时在 tmux或屏幕中正确设置,而且还要正确设置在外面

希望所有这些提示都可以引导您正确解决此问题。如果您不知道,请将您的发现作为对这个答案的评论发表,我将用更具体的修复程序进行更新。

答案 1 :(得分:0)

您可能处于vi兼容模式。尝试:set nocompatible

如果这可以使它发挥所需的功能,请将set nocompatible放在vimrc文件的顶部,以使其默认为该行为。

相关问题