linux - screen : how to turn on alternate screen?

标签 linux macos terminal gnu-screen iterm

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

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

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

我用过:

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

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

附言

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

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.

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

exorce the evil alternate screen

最佳答案

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

altscreen on 添加到您的 $HOME/.screenrc 以启用它。这可能就是您所要做的; $TERM$TERMCAP$TERMINFO 的所有乱七八糟的事情可能都是不必要的。无论如何,我会把这个答案的其余部分留在这里。

我在自己的 .screenrc 中已经有了这个,但它已经忘记了。

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

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


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

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

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

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

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

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

 $ echo $TERM
 screen

我可以像这样将它更改为 xterm:

$ export TERM=xterm

(同样,用您系统上的任何 $TERM 替换“xterm”。)

还可以添加

term xterm

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

关于linux - screen : how to turn on alternate screen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17868652/

相关文章:

macos - OSX Mavericks-不再安装BIND…如何使本地DNS服务器正常工作?

python - 为什么我的 Python 脚本在终端中暂停?

linux - 如何将控制台命令作为字符串返回给正在运行的软件?

linux - Perl:在需要之前显示子例程输出

r - 如何键入哈希键?

linux - 将 ubuntu 虚拟机升级到 OpenGL 4

macos - 如果我将 sysctlbyname 作为 dispatch_once arg 包含在 block 中,为什么它没有定义?

linux - 在 CentOS 7 Linux 中编辑 tomcat-users.xml

linux - CUDA - 关于 “branch” 和 “divergent branch” 的 Visual Profiler 结果的混淆 (2)

linux - 如何使用 unix 在 XML 文件中的特定标记之间添加或替换特定字段