为什么 Vim 与 Ctrl+v 一起使用时会占用 Ctrl 以及如何修复它?

为什么 Vim 与 Ctrl+v 一起使用时会占用 Ctrl 以及如何修复它?

我使用 Vim/etc/zsh/zshrc来添加键绑定,zsh因为它不适用于inputrc.在我的 tmux 终端中,当我输入Ctrl+v然后Ctrl+时, LeftArrowshell 将显示^[OD.但是,当我处于 Vim 插入模式时,按相同的序列将导致^[[D.

我发现这就是当我输入+ then^[[D时 shell 产生的结果。我还在文件中更改为,它按预期工作(按+会使光标向后移动一个单词)。这是我正在谈论的一行:CtrlvLeftArrow^[[D^[OD/etc/zsh/zshrcCtrlLeftArrow

bindkey "^[OD" backward-word

我猜 Vim 有问题,因为它正在消耗Ctrl.我该如何解决?

答案1

这实际上是你的终端在做一些奇怪的事情,而不是 Vim。终端有两组与光标键相关的控制序列,用于历史原因:一种用于全屏应用程序,通常称为“应用程序光标键模式”,另一种用于读取-评估-打印应用程序(例如 shell)。

在过去,读取-评估-打印应用程序没有任何行编辑功能,并且终端或操作系统终端驱动程序最终会变得更加复杂。因此,终端发送了供终端驱动程序使用的控制序列。不知何故,Unix 终端驱动程序从未获得像样的行编辑功能;这些被添加到应用程序中(例如通过 readline 库)。

您的终端正在行编辑光标键模式和应用程序光标键模式下␛OD发送Ctrl+ 。您有两个选择:Left␛[D

  • 将您的终端配置为不区分两种模式。如何执行此操作完全取决于您的终端模拟器。
  • 忍受它。由于任何给定的应用程序始终将终端设置为相同的模式,因此只需根据其使用的模式配置其键绑定即可。

相关内容