屏幕:如何打开备用屏幕?

23
当我在终端工作时,我可以看到最近一次shell命令执行的输出历史记录。如果我运行vim,我会看到我打开的文件全屏显示。当我退出vim时,我又可以看到最近一次shell命令的历史记录。
然而,当我从screen中使用vim时,我在退出vim时看到的是我刚编辑的文件的痕迹,而不是最近一次shell命令的历史记录。我想看到shell的历史记录。
我尝试过以下方法: - 使用terminal.app和iterm2.app - 尝试将xterm切换为xterm-256color(在iterm2.app中) - 检查并取消选中“当应用程序状态栏存在时保存滚动条中的行”和“在备用屏幕模式下保存滚动条中的行”(在iterm2中) - 在.screenrc中添加termcapinfo xterm ti@:te@(虽然它应该是相反问题的解决方案,但为什么不尝试呢) - ssh到Linux机器并尝试在那里使用gnu-screen
但到目前为止,我没有得到期望的结果。

我进行了一些搜索,看到了一些人试图解决相反的问题:

你们很多人可能都知道像less或vi这样的基于控制台的程序在退出后恢复屏幕,导致你刚才输入的文字消失了,这是非常让人恼火的行为。

这种行为背后的主要思想是,程序使用备用屏幕来保存Shell历史记录的图片,并在vim退出时显示它。因此,如果有人想解决相反的问题,他应该

驱逐邪恶的备用屏幕

1个回答

31
更新: 我忘记了screen的一个功能,它默认禁用备用屏幕支持。$HOME/.screenrc中添加altscreen on以启用它。这可能是您需要做的全部操作;所有有关$TERM$TERMCAP$TERMINFO的操作都可能是不必要的。无论如何,我还是会在这里保留这个答案的其余部分。
我自己的.screenrc中已经有这个设置很长时间了,我都忘了它了。
要在当前会话中启用此功能,请键入screen转义字符(默认为Cntrl-A),然后输入:altscreen on并按Enter。如果没有这个设置,即使在terminfo或termcap中定义了转义序列,screen也不会响应它们。
vim(以及less和大多数其他基于curses的全屏程序)使用终端的terminfo条目定义的smcuprmcup字符串。(在较旧的termcap系统中,这些被称为tite)。smcup切换到备用屏幕,rmcup切换回主屏幕。
如果您的terminfo条目没有这些字符串,则程序将无法执行此操作。
默认情况下,screen命令将您的$TERM设置为"screen"。 显然,"screen" terminfo 条目没有 smcuprmcup
如果您想要修改terminfo条目,您可以修改“screen”的现有信息以添加smcuprmcup。 您需要使用infocmp命令将terminfo转换为文本,并使用tic将其转换回terminfo使用的二进制形式。
更简单的解决方案是将$TERM环境变量设置为在调用screen命令之前的值。 现在几乎所有终端仿真器都基于旧的DEC VT100,因此它们应该足够兼容。
例如,在我的系统中,当我登录时,TERM=xterm; 在screen会话中,默认情况下,我将拥有:
 $ echo $TERM
 screen

我可以这样将其更改为xterm:

$ export TERM=xterm

(再次强调,将“xterm”替换为您系统上的$TERM。)

您还可以添加:

term xterm

将其添加到$HOME/.screenrc中。实际上,screen有一些选项可以调整您的termcap/terminfo设置; 请使用man screen并搜索“terminfo”以获取详细信息。


谢谢!在$HOME/.screenrc中输入altscreen on并使用快捷键Ctl+A -> :altscreen on即可生效。 - chown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接