修复 GNU 屏幕下 vim 中的 CTRL-*

修复 GNU 屏幕下 vim 中的 CTRL-*

当在 GNU 屏幕下运行 vim 时,我发现CTRL箭头键和 Pg* 键的组合不能按预期工作。

我正在使用 Ubuntu 10.10vim-gnome软件包。

在另一台同样运行 Ubuntu 的机器上,这确实没有问题;不幸的是我现在没有可用的配置。

这里有一个相关的问题:如何修复 Vim 中的 Ctrl + 箭头?

然而,建议的解决方案是重新映射 vim 的键绑定以与终端仿真器(在这种情况下为 PuTTY)一起使用。我不记得做过任何类似的事情,并且怀疑有一个屏幕配置选项可以解决这个问题。

还有一个线在 gnu-screen 邮件列表上,这表明运行 vim via$ TERM=xterm vim是一个适当的修复或解决方法。这确实有效,但我有点担心可能会有副作用。它听起来也不够熟悉,不足以成为我在另一台计算机上设置的解决方案(如果需要解决方案)。

答案1

正如他在更新中直觉所说的那样,添加term xterm~/.screenrc文件似乎可以解决这个问题。

答案2

根本问题是screen实际终端(由TERM环境变量 Outside标识screen)与内部模拟之间完成的映射screen不完整。

如果你碰巧测试它(使用测试或者),您可能会注意到以下方面的缺陷

  • 颜色
  • 特殊键

term尝试通过设置来解决这些问题的.screenrc缺点是它仅适用于给定的实际终端,并且不能移植到其他终端实现。这文档笔记

不鼓励将术语命令用于非默认目的。

还有另一种解决方案(具有不同的缺点),使用来自screen 文档:

当 screen 尝试为自己找出终端名称时,它首先查找名为的条目屏幕。学期, 在哪里学期是你的变量的内容$TERM。如果不存在这样的条目,则 screen 会尝试screen(或者screen-w,如果终端很宽(132 列或更多))。如果连此条目都找不到,vt100则用作替代。

ncurses 为这种情况提供了几个有用的替代终端描述,例如,screen.xterm-新,修复屏幕映射问题。在实践中,我使用TERM=xterm-new,并在运行屏幕时获得可用的功能键映射。

回到屏幕的term设置,在测试中您可能会注意到有仍然映射问题,这些问题在这些替代方案中得到解决。如果可以使用 获得准确的终端描述term,那么这些替代方案将是 的简单别名screen。他们不是。

ncurses 确实不是提供screen.xterm(原文如此)因为:

  • TERM=xterm被广泛误用于不同于 xterm 的终端仿真器;添加此映射只会加剧这种情况(例如参见为什么不直接使用 TERM 设置为“xterm”?在 ncurses 常见问题解答中)
  • 替代名称screen.xterm不太可能安装在远程系统上(请参阅来自2015年6月在终端数据库中)。

然而,总的来说,使用备用名称比term在您的 中使用是一种改进.screenrc:它解决的问题比它产生的问题多。设置的情况正好相反term

答案3

还有几种其他方法可以设置在运行进程中工作的终端:

  • 在运行屏幕实例中,按^A-:并发出命令term xterm将导致新开的该实例下的屏幕以将其$TERM环境变量设置为xterm;这将依次传播到被调用的vim实例。这些 vim 实例将显示有关 CTRL 组合的正确行为;我还没有发现这个策略有任何副作用。此命令不会影响现有屏幕。这个命令当然可以在文件中使用~/.screenrc,所以有可能在另一台机器上使用了这个方法。

  • 在正在运行的 vim 实例中,该命令set term=xterm将使 CTRL-combos 在该 vim 实例中工作。由于我还不明白的原因,这会产生断开 X 剪贴板(即@*和)的副作用。有趣的是,当在以 . 开头的 vim 实例中执行@+该命令时,也会发生剪贴板副作用。:set term=screen$TERM=xterm

相关内容