Answers:
此行为来自某些(硬件)终端和大多数(软件)终端仿真器中包含的“备用屏幕”功能。发生的情况是,某些支持终端的程序会切换到备用“屏幕”以执行其工作,并在被关闭(退出,暂停等)时切换回正常的“屏幕”。这有效地清除了此类程序的最终输出。
在网络上搜索“ terminfo防止altscreen” 的页面提供了讨论备用屏幕“问题”和几种解决方案的页面。
如该链接页面所述,可以配置某些程序以避免使用备用屏幕。较少的-X
选项是执行此操作的间接方法。通过取消设置和变量,可以类似地配置Vim 。t_ti
t_te
范围更广的解决方案是编辑终端的terminfo条目,以使其不包括备用屏幕控制序列。terminfo条目形成一个数据库,该数据库告诉程序将哪些控制序列发送到终端以创建某些效果(移动光标,清除屏幕,擦除当前行的一部分等)。通过编辑终端使用的terminfo条目,您可以安排“忽略以告知”所有使用terminfo的程序,甚至存在“备用屏幕”控制序列。
从xterm的控制序列列表中,我们可以看到感兴趣的控制序列(对于类似xterm的终端仿真器)是
ESC [ ? 47 h
同样适用于1047和1049),以及ESC [ ? 47 l
同样适用于1047和1049)。这些代码很可能出现在terminfo变量smcup
和中rmcup
。为您当前的TERM切除这些变量的快速而肮脏的方法可能看起来像这样:
infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo
该方法非常粗糙,并且肯定不适用于所有终端,但可能适用于大多数xterm类终端仿真器。理想情况下,您应该调查终端的terminfo条目的smcup
和rmcup
变量中的值,并保守地编辑它们以防止不良行为。上面链接的讨论/解决方案页面上有一个“预煮” terminfo文件,您可以使用它来代替自己的工具(但是这样做有什么用呢?)。
您需要将设置$MANPAGER
为/usr/bin/less -isX
,替换所需的路径less
。重要的部分是-X
; 的-is
是传递给少的缺省设置。
假设您的寻呼机是less
,请将环境变量设置LESS
为包括“ X”。例如我的是:
LESS="-iMFXRj4a"
您可以在~/.bashrc
文件中设置
export LESS="-X"
并包括您常用的其他选项或添加您喜欢的选项。