在终端中工作时,我看到了最后一个Shell命令执行输出的历史记录。如果运行vim,我会看到全屏打开的文件。退出vim时,我可以再次看到最后一个shell命令的历史记录。
但是,当我从屏幕上使用vim时。我在退出vim时看到的是刚刚编辑的文件的足迹,而不是最后一个shell命令的历史记录。 我想看看外壳的历史。
我该如何实现这种行为?
我用了:
到目前为止,我还没有得到想要的行为。
更新: 我已经忘记screen了默认情况下禁用备用屏幕支持的功能。
screen
添加altscreen on到您$HOME/.screenrc的启用它。这可能就是您要做的全部;所有关于与餐间$TERM,$TERMCAP以及$TERMINFO可能是不必要的。无论如何,我将在此处保留其余答案。
altscreen on
$HOME/.screenrc
$TERM
$TERMCAP
$TERMINFO
我已经拥有了.screenrc这么久,以至于让我无所适从。
.screenrc
要在当前会话中启用此功能,请键入您的screen转义字符(Cntrl-A默认情况下),然后输入:altscreen on Enter。
Cntrl-A
:altscreen on
Enter
没有这个,screen即使在terminfo或termcap中定义了转义序列,也不会响应。
vim(和less,以及大多数其他基于curses的全屏程序)使用terminfo条目为您的终端定义的smcup和rmcup字符串。(在较旧的termcap系统中,它们分别称为ti和te)。 smcup切换到备用屏幕,然后rmcup切换回主屏幕。
vim
less
smcup
rmcup
ti
te
如果您的terminfo条目没有这些字符串,则程序将无法执行这些操作。
屏幕命令默认情况下将设置$TERM为"screen"。显然,“屏幕” terminfo条目没有smcup和rmcup。
"screen"
如果您想入侵terminfo条目,则可以修改现有信息,以便在“屏幕”中添加smcup和rmcup。您将需要infocmp命令将terminfo转换为文本,并将tic其转换回terminfo使用的二进制形式。
infocmp
tic
一个更简单的解决方案是将$TERM环境变量设置为调用screen命令之前的环境变量。如今,几乎所有终端仿真器都基于旧的DEC VT100,因此它们应具有足够的兼容性。
在我的系统上,例如,当我登录时,我拥有TERM=xterm; MacOS上可能还有其他内容。在一个screen会话中,默认情况下,我将具有:
TERM=xterm
$ echo $TERM screen
我可以将其更改为xterm这样:
xterm
$ export TERM=xterm
(再次,用$TERM系统上的任何内容替换“ xterm” 。)
您也可以添加
term xterm
给你$HOME/.screenrc。实际上,screen有许多选项可用于调整termcap / terminfo设置。man screen并搜索“ terminfo”以获取详细信息。
man screen