当我在终端工作时,我看到了最后一个shell命令执行输出的历史记录。如果我运行vim,我会看到我打开全屏的文件。当我退出vim时,我可以再次看到最后一个shell命令的历史记录。
然而,当我从屏幕上使用vim时。我看到我刚从vim退出时编辑的文件的足迹而不是最后一个shell命令的历史记录。 我想看看shell的历史。
如何实现此行为?
我用过:
到目前为止,我没有得到理想的行为。
P.S。
我google了一下,看到了那些试图解决相反问题的人的评论:
此行为背后的主要思想是程序是否使用备用屏幕来保存shell历史记录的图片并在vim退出时显示它。因此,如果想要解决相反的问题,他应该
答案 0 :(得分:22)
更新:我忘记了默认情况下禁用备用屏幕支持的screen
功能。
将altscreen on
添加到$HOME/.screenrc
以启用它。这可能是你所要做的;所有关于$TERM
,$TERMCAP
和$TERMINFO
的混乱可能都是不必要的。无论如何,我会在这里留下其余的答案。
我在自己的.screenrc
中已经有了这个,所以它让我不知所措。
要为当前会话启用此功能,请键入screen
转义字符(默认情况下为 Cntrl-A ),然后键入:altscreen on
Enter
如果没有这个,screen
将不会响应转义序列,即使它们是在terminfo或termcap中定义的。
vim
(和less
以及大多数其他基于curses的全屏程序)使用终端的terminfo条目定义的smcup
和rmcup
字符串。 (这些在旧的termcap系统中分别称为ti
和te
。 smcup
切换到备用屏幕,rmcup
切换回主屏幕。
如果您的terminfo条目没有这些字符串,程序将无法执行此操作。
默认情况下,屏幕命令会将您的$TERM
设置为"screen"
。显然,“screen”terminfo条目没有smcup
和rmcup
。
如果您想隐藏terminfo条目,可以修改“屏幕”的现有信息,以添加smcup
和rmcup
。您需要infocmp
命令将您的terminfo转换为文本,并tic
将其转换回terminfo使用的二进制形式。
更简单的解决方案是将$TERM
环境变量设置为调用screen
命令之前的任何变量。现在几乎所有终端仿真器都基于旧的DEC VT100,因此它们应该足够兼容。
在我的系统上,例如,当我登录时,我有TERM=xterm
;它可能是MacOS上的其他东西。在screen
会话中,默认情况下,我会:
$ echo $TERM
screen
我可以将其更改为xterm
,如下所示:
$ export TERM=xterm
(再次,用您系统上的$TERM
替换“xterm”。)
您也可以添加
term xterm
到$HOME/.screenrc
。事实上,screen
有许多选项可用于调整termcap / terminfo设置; man screen
并为血淋淋的细节搜索“terminfo”。