当我在终端工作时,我会看到最后一个 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
到目前为止,我没有得到想要的行为。
附言
我用谷歌搜索了一下,看到了试图解决相反问题的人的评论:
此行为背后的主要思想是程序是否使用备用 screen 来保存 shell 历史的图片并在 vim 退出时显示它。因此,如果一个人想解决相反的问题,他应该
最佳答案
更新:我忘记了 screen
的一项功能,该功能默认禁用备用 screen 支持。
将 altscreen on
添加到您的 $HOME/.screenrc
以启用它。这可能就是您所要做的; $TERM
、$TERMCAP
和 $TERMINFO
的所有乱七八糟的事情可能都是不必要的。无论如何,我会把这个答案的其余部分留在这里。
我在自己的 .screenrc
中已经有了这个,但它已经忘记了。
要为当前 session 启用此功能,请键入您的 screen
转义字符(默认情况下为 Cntrl-A),然后键入 :altscreen on
输入。
如果没有这个,screen
将不会响应转义序列,即使它们是在 terminfo 或 termcap 中定义的。
vim
(和 less
,以及大多数其他基于 curses 的全屏程序)使用 smcup
和 rmcup
由终端的 terminfo 条目定义的字符串。 (在旧的 termcap 系统中,它们分别称为 ti
和 te
)。 smcup
切换到备用 screen ,rmcup
切换回主 screen 。
如果您的 terminfo 条目没有这些字符串,程序将无法执行此操作。
默认情况下,screen 命令将您的 $TERM
设置为 "screen"
。显然,“screen ”terminfo 条目没有 smcup
和 rmcup
。
如果您想破解 terminfo 条目,您可以修改“screen”的现有信息以添加 smcup
和 rmcup
。您将需要 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/