vim中插入模式下的箭头键



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

A

它看起来像An,但我不确定它到底发送了什么字符/代码。为什么会发生这种情况,有没有办法禁用这种情况?

终端为向上箭头发送的通常序列是<Esc>OA^[OA(^[序列表示<Esc>密钥,也相当于Ctrl+[。(

如果您的Vim无法将此序列识别为向上箭头,它将最终执行此序列:<Esc>将离开插入模式并进入正常模式,然后O在当前行之上插入新行并进入插入模式,然后插入文字A,因为您将再次处于插入模式。

您可以通过在插入模式下键入Ctrl+V,然后键入向上箭头来确认这确实是您的终端发送Vim的顺序。(插入模式中的Ctrl+V会直接插入下一个字符。(我希望您能看到插入的^[OA序列。

然后,您可以使用:set <Up>命令检查Vim的想法向上箭头的顺序。我想你会看到这样的东西:

t_ku  <Up>           ^[OA

(t_ku是与该向上箭头键对应的设置的内部名称。您也可以使用:set termcap查看与终端相关的所有Vim设置,包括特殊的键代码。(

如果其中任何一个都不符合预期,这将解释为什么您的Vim没有识别向上箭头键。(另一种解释是'ttimeoutlen'设置得太短,但我认为这是极不可能的。(

这些设置通常由'term'设置管理。默认情况下,它是根据Vim之外的shell上$TERM的任何内容设置的。

你可以先看看Vim认为'term'是什么,以及它是从哪里设置的:

:verbose set term?
term=screen-256color
Last set from ~/.vimrc line 100

:verbose部分要求Vim告诉你它是从哪里设置的,这样你就可以看到你的vimrc或你的一个插件是否正在覆盖它。如果Vim没有显示这些,那就意味着它来自shell中的$TERM变量。

因此,看看$TERM在Vim之外被设置为什么,看看这是否正确。你是在某个地方明确设置的吗?它是shell的初始化文件之一,还是来自终端模拟器本身?

无论您使用的是tmux还是screen,也可能相关,在这种情况下,您应该仔细检查$TERM是否在tmux或screen内部以及外部都设置正确。

希望所有这些提示都能引导你朝着正确的方向解决这个问题。如果你不能弄清楚,请将你的发现作为对此答案的评论发布,我会用你可以尝试的更具体的修复方法更新它。

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

如果这使它按您想要的方式运行,请将set nocompatible放在vimrc文件的顶部,使其默认为这种行为。

相关内容

  • 没有找到相关文章

最新更新