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

时间:2013-07-25 21:00:27

标签: linux macos terminal gnu-screen iterm

当我在终端工作时,我看到了最后一个shell命令执行输出的历史记录。如果我运行vim,我会看到我打开全屏的文件。当我退出vim时,我可以再次看到最后一个shell命令的历史记录。

然而,当我从屏幕上使用vim时。我看到我刚从vim退出时编辑的文件的足迹而不是最后一个shell命令的历史记录。 我想看看shell的历史。

如何实现此行为?

我用过:

  • terminal.app和iterm2.app
  • 尝试将xterm切换到xterm-256color(在iterm2.app中)
  • 检查并取消选中“当应用程序状态栏存在时保存行以向后滚动”和“在备用屏幕模式下保存行以向后滚动”(在iterm2中)
  • 将termcapinfo xterm ti @:te @添加到.screenrc(虽然它应该是解决相反问题的方法,但为什么不尝试)
  • sshing到linux机器并试图在那里使用gnu-screen

到目前为止,我没有得到理想的行为。

P.S。

我google了一下,看到了那些试图解决相反问题的人的评论:

Many of you probably know the annoying behaviour of console-based programs like less or vi restoring the screen after exiting so that the text you just had there vanishes.

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

exorce the evil alternate screen

1 个答案:

答案 0 :(得分:22)

更新:我忘记了默认情况下禁用备用屏幕支持的screen功能。

altscreen on添加到$HOME/.screenrc以启用它。这可能是你所要做的;所有关于$TERM$TERMCAP$TERMINFO的混乱可能都是不必要的。无论如何,我会在这里留下其余的答案。

我在自己的.screenrc中已经有了这个,所以它让我不知所措。

要为当前会话启用此功能,请键入screen转义字符(默认情况下为 Cntrl-A ),然后键入:altscreen on Enter

如果没有这个,screen将不会响应转义序列,即使它们是在terminfo或termcap中定义的。


vim(和less以及大多数其他基于curses的全屏程序)使用终端的terminfo条目定义的smcuprmcup字符串。 (这些在旧的termcap系统中分别称为titesmcup切换到备用屏幕,rmcup切换回主屏幕。

如果您的terminfo条目没有这些字符串,程序将无法执行此操作。

默认情况下,屏幕命令会将您的$TERM设置为"screen"。显然,“screen”terminfo条目没有smcuprmcup

如果您想隐藏terminfo条目,可以修改“屏幕”的现有信息,以添加smcuprmcup。您需要infocmp命令将您的terminfo转换为文本,并tic将其转换回terminfo使用的二进制形式。

更简单的解决方案是将$TERM环境变量设置为调用screen命令之前的任何变量。现在几乎所有终端仿真器都基于旧的DEC VT100,因此它们应该足够兼容。

在我的系统上,例如,当我登录时,我有TERM=xterm;它可能是MacOS上的其他东西。在screen会话中,默认情况下,我会:

 $ echo $TERM
 screen

我可以将其更改为xterm,如下所示:

$ export TERM=xterm

(再次,用您系统上的$TERM替换“xterm”。)

您也可以添加

term xterm

$HOME/.screenrc。事实上,screen有许多选项可用于调整termcap / terminfo设置; man screen并为血淋淋的细节搜索“terminfo”。