我退出男人后仍如何看到“男人”文本?


16

我通常使用tcsh或bash,并且经常想使用'man'来查看命令的选项。当前,当我退出man或ctrl-C时,man文本消失了,并且在执行“ man”命令之前,我看到了回滚缓冲区。我想在命令提示符下键入命令而不打开第二个窗口时仍看到正在查看的“ man”文本作为参考,我该怎么做?

Answers:


17

此行为来自某些(硬件)终端和大多数(软件)终端仿真器中包含的“备用屏幕”功能。发生的情况是,某些支持终端的程序会切换到备用“屏幕”以执行其工作,并在被关闭(退出,暂停等)时切换回正常的“屏幕”。这有效地清除了此类程序的最终输出。

在网络上搜索“ terminfo防止altscreen” 的页面提供了讨论备用屏幕“问题”和几种解决方案的页面

如该链接页面所述,可以配置某些程序以避免使用备用屏幕。较少-X选项是执行此操作的间接方法。通过取消设置和变量,可以类似地配置Vim 。t_tit_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条目的smcuprmcup变量中的值,并保守地编辑它们以防止不良行为。上面链接的讨论/解决方案页面上有一个“预煮” terminfo文件,您可以使用它来代替自己的工具(但是这样做有什么用呢?)。



9

假设您的寻呼机是less,请将环境变量设置LESS为包括“ X”。例如我的是:

LESS="-iMFXRj4a"

您可以在~/.bashrc文件中设置

export LESS="-X"

并包括您常用的其他选项或添加您喜欢的选项。


4

另一个窍门-不如其他答案那么优雅-是:

man what | more

(至少,这在MacOS X上有效,通常足以使其生效。)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.