macos - vim 插入模式下的箭头键

标签 macos vim iterm2 iterm

当我在 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/

相关文章:

Vim 与 Powershell

vim - 通常,我如何在 VIM 中使用 "go to definition"?那我怎么用golang呢?

fish - iTerm2 上的新 fish session get (standard_in) 1 : parse error

terminal - 在 Mac 上的 Visual Studio Code 中更改默认终端应用

macos - 如何使用 tmux 向下滚动鼠标滚轮

macos - 如何让OpenGlView的init函数运行?

macos - 为什么在发送 ACK 之前等待 SIFS 时间?

vim - 如何更改所选代码的颜色(Vim 方案)?

macos - 在 Interface Builder 中的 View Effects Inspector 中选择 CALayer 有何作用?

ios - 有时 mac 键盘不起作用我必须从模拟器键盘输入