为什么 GNU screen 会干扰 Vim 的 Ctrl-Pageup 切换标签?

为什么 GNU screen 会干扰 Vim 的 Ctrl-Pageup 切换标签?

我通常使用Ctrl+PageUpCtrl+PageDown在 Vim 中切换选项卡。但是在 GNU screen 中运行 Vim 时,它们不会切换选项卡,而是具有切换大小写的效果。

我正在运行以下绑定.screenrc

bindkey "^[[1;5D" prev
bindkey "^[[1;5C" next

screen这些允许我使用Ctrl+Ctrl+在选项卡之间移动

但禁用这些绑定并不能解决我的问题,所以我不认为它们是罪魁祸首。

我假设我的终端仿真器、屏幕和 Vim 之间存在一些我不理解的交互。

编辑:我已经找到通过这个答案启动 vim 并将TERM环境变量设置(覆盖)为xterm是一个可行的解决方法,如下所示:

TERM=xterm vim

但我认为问题仍然存在,因为我想知道为什么这是必要的。

答案1

通常,当您运行时screen它会进行一些初始化,这(取决于实际终端)可能会改变各种键盘键发送的转义序列。

例如,我可以看到它初始化xterm

  • 应用程序光标键
  • 应用程序键盘

在应用程序模式下,xterm(和其他终端)会更改未修改的特殊键发送转义序列的方式,使用不同的前缀(escape[与 相比escapeO)。对于修改的键(例如controlPageUp),xterm 不会更改其方案。但您使用的终端可能会这样做。

由于 norscreen都不vim关注这些修改后的键的终端描述,因此在运行时他们不会看到终端描述有所不同screen。但您可以检查运行如何screen更改这些键发送的实际字符串,并调整您的.screenrc以反映这一点。

您可以使用以下方式查看实际的字符串

  • cat -v(在大多数系统上),或者
  • 特殊键前面加上controlV

进一步阅读:

相关内容