「退出“man”手册后,在屏幕上保留查看的内容(在Linux中)」

  CREATED BY JENKINSBOT

存在的现象

当我们执行终端全屏的命令后,在退出时,终端的内容会被清空。比如man find,按“q”退出时,回到我们执行命令之前的状态,而不会在终端上保留执行man find命令产生的输出。

有时这并不方便。因为我们也许需要参照手册的提示内容,来键入后面的命令。因此需要保留命令在终端上的产生的输出。

本文的主要内容就是讨论如何在终端里保留全屏命令产生的输出。

为什么屏幕的内容会被“清空”?

实际上并不是”清空“,这种行为来自某些(硬件)终端和大多数(软件)终端仿真器中提供的“备用屏幕(Alternate Screen)”功能。这会发生什么事情是一些“终端感知程序”切换到“备用屏幕”来完成他们的工作,并在他们被退出(或暂停等等)时切换回“正常屏幕”。这有效地清除了这些程序的最终输出,所以看起来像是被清空了。

因此入手点有两个:

  • 禁止程序使用“备用屏幕”。这通过设置特定程序实现。
  • 关闭“备用屏幕”功能。这通过设置终端程序实现。

下面将按照这两方面进行介绍。

通过设置特定程序实现

文章「Exorcising the Evil Alternate Screen」讨论了“备用屏幕”的问题,并提出了几个解决办法。

某些程序通过配置可以禁用“备用屏幕”:

  • 命令less(1)可以使用-X选项,或者通过它支持的LESS环境变量。
  • 命令vim(1)可以通过取消t_ti和t_te变量。
  • 关于GNOME Terminal参考「Stop gnome-terminal screen clear」一文。
  • 终端复用程序screen可以使用altscreen off配置选项。而tmux可以在配置文件中添加set -g alternate-screen off配置行。

有关的详细内容和配置细节请参考对应的手册。

通过设置终端程序实现

本部分旨在提用一个在XTerm中相对通用的方法,而不是去配置具体的程序来实现“禁用备用屏幕”。

# 方法一:配置XTerm控制序列

本部分参考「Is there any way to exit “less” without clearing the screen?」、「How can I still see the ‘man’ text after I quit man?」文章。

# 方法二:修改.Xresource文件

在$HOME/.Xresources文件中加入:

XTerm*titleInhibit: true

然后,执行:xrdb $HOME/.Xresources命令。

参考文献

Is there any way to exit “less” without clearing the screen?
有没有办法退出“less”而不清除屏幕?
Xterm Control Sequences

更新日志

07/30/2017 创建文章。
08/07/2018 完善文章内容。