退出 man 后,我怎么还能看到“man”的文字?

Sol*_*Sol 17 linux bash command-line scrolling

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

Chr*_*sen 18

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

对“terminfo prevent altscreen”的网络搜索提供了一个讨论替代屏幕“问题”和几种解决方案的页面

正如该链接页面所描述的那样,可以配置某些程序以避免使用备用屏幕。较少-X选项是这样做的间接方式。可以通过取消设置和变量来类似地配置 Vim 。t_tit_te


范围更广的解决方案是编辑终端的terminfo条目,使其不包含备用屏幕控制序列。terminfo 条目形成一个数据库,它告诉程序将哪些控制序列发送到终端以创建某些效果(移动光标、清除屏幕、擦除当前行的一部分等)。通过编辑终端使用的 terminfo 条目,您可以安排“忽略告诉”所有使用 terminfo 的程序“交替屏幕”控制序列甚至存在。

xterm的控制序列列表中,我们可以看到感兴趣的控制序列(对于类似 xterm的终端模拟器)是

  • 启用备用屏幕:(ESC [ ? 47 h同样适用于 1047 和 1049),以及
  • 恢复正常屏幕:(ESC [ ? 47 l同样适用于 1047 和 1049)。

这些代码很可能出现在 terminfo 变量smcuprmcup. 为您当前的 TERM 删除这些变量的快速而肮脏的方法可能如下所示:

infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo
Run Code Online (Sandbox Code Playgroud)

这种方法相当粗糙,肯定不适用于所有终端,但它可能适用于大多数类似 xterm的终端模拟器。理想情况下,您应该调查终端的 terminfo 条目的smcuprmcup变量中的值,并保守地编辑它们以防止出现不需要的行为。上面链接的讨论/解决方案页面有一个“预煮”的 terminfo 文件,您可以使用它来代替自己的黑客攻击(但这有什么乐趣?)。


Ign*_*ams 10

您需要设置$MANPAGER/usr/bin/less -isXless根据需要替换找到的路径。重要的部分是-X; 的-is是传递给少的缺省设置。


Den*_*son 9

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

LESS="-iMFXRj4a"
Run Code Online (Sandbox Code Playgroud)

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

export LESS="-X"
Run Code Online (Sandbox Code Playgroud)

并包括您已经拥有的任何其他选项或添加您喜欢的选项。