我的配置屏幕遇到问题。
我的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:
- 使用给定的
.screenrc
,screen
程序模拟 xterm 备用屏幕功能。 - 这是使用 terminfo
smcup
和rmcup
(termcapti
和te
) 控制序列完成的 - 切换时到在备用屏幕上,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 中。