当我在 vim 中处于插入模式并使用箭头键时,它会发送看起来像字母和回车符的内容。例如,按 ↑ 会发送:
A
它看起来像 A\n
但我不确定它到底发送什么字符/代码。为什么会发生这种情况,有没有办法禁用它?
最佳答案
终端发送的向上箭头的通常序列是 <Esc>OA
或^[OA
( ^[
序列代表 <Esc>
键,也相当于 Ctrl+[
。)
如果你的 Vim 无法识别这个序列为向上箭头,它最终会执行这个序列: <Esc>
这将离开插入模式并进入正常模式,然后 O
在当前行上方插入新行并进入插入模式,然后插入文字 A
因为您将再次处于插入模式。
您可以通过输入 Ctrl+V
来确认这确实是您的终端发送给 Vim 的序列。然后在插入模式下按向上箭头。 ( Ctrl+V
在插入模式下按字面插入下一个字符。)我希望您会看到 ^[OA
插入序列。
然后你可以检查你的 Vim 认为向上箭头的顺序是 :set <Up>
命令。我希望您会看到类似的内容:
t_ku <Up> ^[OA
( t_ku
是与此向上键对应的设置的内部名称。您还可以使用 :set termcap
查看与终端相关的所有 Vim 设置,包括特殊键代码。)
如果其中任何一个不符合预期,那就可以解释为什么你的 Vim 无法识别向上箭头键。 (另一种解释是 'ttimeoutlen'
设置得太短,但我认为这不太可能。)
这些设置通常由 'term'
管理环境。默认情况下,它是根据 $TERM
的内容设置的。在 Vim 之外的 shell 上。
你可以先看看 Vim 的想法 'term'
是,以及它的设置位置:
:verbose set term?
term=screen-256color
Last set from ~/.vimrc line 100
:verbose
部分要求 Vim 告诉你它是从哪里设置的,这样你就可以看到你的 vimrc 或插件之一是否覆盖了它。如果 Vim 没有显示任何内容,则意味着它来自 $TERM
shell 中的变量。
那么看看什么$TERM
设置为 Vim 外部,看看这是否正确。您是否在某处明确设置了该值?它是 shell 的初始化文件之一还是来自终端模拟器本身?
无论您使用 tmux 还是 screen,也可能相关,在这种情况下,您应该仔细检查 $TERM
tmux 或屏幕内部以及外部都已正确设置。
希望所有这些提示能够引导您朝着正确的方向解决此问题。如果您无法弄清楚,请将您的发现作为对此答案的评论发布,我将使用您可以尝试的更具体的修复来更新它。
关于macos - vim 插入模式下的箭头键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61469112/