【问题标题】:screen: how to turn on alternate screen?屏幕:如何打开备用屏幕?
【发布时间】:2013-07-25 23:22:13
【问题描述】:

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

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

我怎样才能实现这种行为?

我用过:

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

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

附言

我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

【问题讨论】:

    标签: linux macos terminal gnu-screen iterm


    【解决方案1】:

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

    altscreen on 添加到您的$HOME/.screenrc 以启用它。这可能就是您所要做的。所有与$TERM$TERMCAP$TERMINFO 相关的事情可能都是不必要的。无论如何,我会把剩下的答案留在这里。

    我在自己的.screenrc 中一直有这个想法,所以我忘记了。

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

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


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

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

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

    如果您想破解 terminfo 条目,可以修改“屏幕”的现有信息以添加 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”以获取详细信息。

    【讨论】:

    • 谢谢! altscreen on$HOME/.screenrcCtl+A -> :altscreen on 对我有用。
    猜你喜欢
    • 2012-09-27
    • 2011-11-26
    • 2016-03-17
    • 2016-10-05
    • 2013-04-27
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多