2013-07-25 199 views
15

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

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

我该如何做到这一点?

我使用:

  • terminal.app和iterm2.app
  • 尝试切换到的xterm的xterm-256color(在iterm2.app)
  • 检查和取消选中“保存线回溯时的(在iterm2中)
  • 添加termcapinfo xterm ti @:te @ to .screenrc(虽然它应该是对相反问题的解决方案,但为什么不能试试)
  • sshing到Linux机器,并试图使用gnu屏幕那里

到目前为止,我没有得到所需的行为。

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.

这种行为背后的主要思想是程序是否使用备用屏幕,以节省壳历史图片并在vim退出时显示它。因此,如果一个人想解决的问题正好相反,他应该

exorce the evil alternate screen

回答

18

更新:我已经忘记了禁用默认交替屏支持的screen功能。

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

我已经在我自己的.screenrc这个这么长时间,它滑了我的脑海。

要启用此功能在当前会话中,键入其次:altscreen onscreen转义字符(CNTRL-A默认)输入

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


vim(和less,和其他大多数基于光标的全屏幕程序)使用由终端的terminfo项中定义的smcuprmcup字符串。 (这些在旧的termcap系统中分别被称为tite)。 smcup切换到备用屏幕,rmcup切换回主屏幕。

如果你的terminfo项没有这些字符串,程序将无法做到这一点。

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

如果您觉得黑客要使用terminfo条目,您可以修改“screen”的现有信息以添加smcuprmcup。您需要使用infocmp命令将terminfo转换为文本,并使用tic将其转换回由terminfo使用的二进制格式。

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

在我的系统,例如,当我登录我TERM=xterm;这可能是MacOS上的其他功能。在一个screen会话,默认情况下,我想有:

$ echo $TERM 
screen 

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

$ export TERM=xterm 

(同样,取代 “xterm的” 以任何$TERM是您的系统上。)

您还可以添加

term xterm 

到你的$HOME/.screenrc。事实上,screen有多个选项可用于调整termcap/terminfo设置; man screen并搜索“terminfo”以获取血腥详细信息。

+0

谢谢!在'$ HOME/.screenrc'和'Ctl + A' - >':altscreen on'中的'altscreen on'是我的工作。 – chown