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

use*_*776 18 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

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

PS

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

你们中的许多人可能都知道基于控制台的程序的烦人行为,例如less或vi在退出后恢复屏幕,这样你刚才那里的文字就会消失.

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

揭开邪恶的替代屏幕

Kei*_*son 23

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

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

我已经把它放在我自己的.screenrc这么长时间里.

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

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


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

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

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

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

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

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

 $ echo $TERM
 screen
Run Code Online (Sandbox Code Playgroud)

我可以把它改成xterm这样:

$ export TERM=xterm
Run Code Online (Sandbox Code Playgroud)

(再次,用$TERM您系统上的任何内容替换"xterm" .)

你也可以添加

term xterm
Run Code Online (Sandbox Code Playgroud)

到你的$HOME/.screenrc.实际上screen有很多选项可以调整你的termcap/terminfo设置; man screen并为血淋淋的细节搜索"terminfo".