屏幕 - 退出 Vim 后出现奇怪的行为

屏幕 - 退出 Vim 后出现奇怪的行为

我的配置屏幕遇到问题。

我的screen.rc非常简单,如下所示:

altscreen on
termcapinfo xterm ti@:te@

我想将屏幕配置为具有与使用 SSH 客户端直接连接相同的行为MobaXterm。所以我想要实现的是:

  • 可以使用鼠标滚动vim(不使用设置鼠标a
  • 用鼠标滚动终端输出(不带Ctrl+ A Esc
  • 退出vim和其他编辑器等后,我想查看以前的命令,而不是输出vim,也没有清除屏幕。

此外,配置.vimrc(以及类似的本地配置文件)也是不可能的,因为我使用屏幕连接到许多机器,并且无法.vimrc在所有机器上进行修改。

我发现实现这一切是不可能的。因此,在我的终端中,使用这两行代码,.screenrc我可以滚动终端输出,但在终端中,vim我必须使用键盘 - 好吧。

那么,直奔问题吧。

当我关闭时,vim我会表现出非常奇怪的行为。控制台的输出就像打开之前一样,vim所以这就是我想要的。但提示位于窗口顶部,而不是在我的最后一个命令(运行vim)之后。所以我是在之前的一些输出的基础上写的。

我希望你明白。你知道如何修复它吗?任何帮助,将不胜感激。

我不知道这是否有意义,但当MobaXterm我配置屏幕时,我正在连接到虚拟机。也许这也与 SSH 有关,谁知道呢。

编辑:我也尝试了另一个类似的 ssh 客户端Putty,它是相同的

答案1

所描述的症状来自rc(恢复光标)转义序列。想了想,问题的根源很可能是vim:

  • 使用给定的.screenrcscreen程序模拟 xterm 备用屏幕功能。
  • 这是使用 terminfosmcuprmcup(termcaptite) 控制序列完成的
  • 切换时在备用屏幕上,xterm (a) 保存光标位置,(b) 清除备用屏幕,以及 (c) 显示备用屏幕。
  • 切换时在备用屏幕中,xterm (a) 恢复正常屏幕的光标位置并 (b) 显示正常屏幕。
  • 这些操作是在单个控制序列中完成的,而不是分开的。在终端描述中,您可能(infocmp 输出)看到一个1049.
  • screen程序模拟这些操作。
  • 然而,不像xterm,它不使用单个变量来保存/恢复光标位置:快速检查显示,如果
    • 我保存光标位置(用tput sc),
    • 切换到/从备用屏幕(tput smcup
    • 接下来是tput rmcup),最后
    • 恢复光标位置 ( tput rc),
    • 然后光标移动到 保存的位置tput sc

vim——以及 vim 的插件——可以发送转义序列。看起来 vim 退出期间的某些内容正在发送转义序列以恢复光标。在这里快速检查一下,vim 表现正常(但配置和版本不同)。所以我会检查插件。

如果我正在调试这种情况,我将捕获发送到屏幕的字符(script例如使用)并查找最常用的序列rc

  • escape7
  • escape[u

如果能更紧密地匹配 xterm 的行为就好了,但最终看来发送意外的保存/恢复光标序列screen存在问题。vim

相关阅读:

答案2

原来问题是由一条愚蠢的线路引起的.bashrc

TERM=xterm; export $TERM

所以在运行 screen 后,它TERM=xterm不再是TERM=screen.删除这条线后问题就消失了。

答案3

我在这里找到了一种解决方案:如何在终端中配置屏幕恢复? 所以对于 vim 来说:

对于 vim,你可以包含类似的内容

set t_ti= t_te=

在你的 ~/.vimrc 中。

相关内容