屏幕:如何打开备用屏幕



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

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

我如何实现这种行为

我用过:

  • terminal.app和iterm2.app
  • 尝试将xterm切换为xterm-256color(在iterm2.app中)
  • 选中和取消选中"当应用程序状态栏存在时,保存行以进行滚动"one_answers"在交替屏幕模式下保存行以滚动"(在iterm2中)
  • 将termcapinfo xterm ti@:te@添加到.screenrc中(尽管这应该是相反问题的解决方案,但为什么不尝试呢)
  • sshing到linux机器并尝试在那里使用gnu屏幕

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

p.S.

我在谷歌上搜索了一下,看到了一些试图解决相反问题的人的评论:

你们中的许多人可能知道基于控制台的程序的烦人行为,比如less或vi,在退出后恢复屏幕,这样你刚才看到的文本就会消失。

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

驱魔备用屏幕

更新:我忘记了screen的一个功能,该功能默认禁用备用屏幕支持。

altscreen on添加到您的$HOME/.screenrc以启用它。这可能是您所要做的全部;对$TERM$TERMCAP$TERMINFO的所有干扰可能都是不必要的。不管怎样,我还是把剩下的答案留在这里。

我在自己的.screenrc中已经有这么长时间了,我忘了。

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

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


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

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

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

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

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

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

 $ echo $TERM
 screen

我可以这样把它改成xterm

$ export TERM=xterm

(同样,用系统上的$TERM替换"xterm"。)

您也可以添加

term xterm

到您的$HOME/.screenrc。事实上,screen有许多选项可以调整您的termcap/terminfo设置;man screen,搜索"terminfo"以获取血腥细节。

相关内容

  • 没有找到相关文章

最新更新