我通常使用Ctrl+PageUp和Ctrl+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
进一步阅读:
- 我如何才能看到我的键盘发送的内容?(ncurses 常见问题)
- 终端数据库描述
screen