当我退出程序时,“man”如何恢复屏幕?

VAR*_*121 20 shell bash man terminal

如果我打开一个程序的手册页,比如catls,它会打印(可能不是合适的词)手册页的内容,当我按下 时q,它会像调用man命令之前一样显示屏幕。恢复是如何发生的?什么会擦除所有内容,然后打印 shell 的先前内容?

例子:

[VAR121@Tesla Testing]$  man ls
Run Code Online (Sandbox Code Playgroud)

输出:

LS(1)                                                        User Commands                                                        LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

 ............
Run Code Online (Sandbox Code Playgroud)

当我按下 时q,屏幕回到 shell 的默认外观,如下所示的提示。

[VAR121@Tesla Testing]$  man ls
[VAR121@Tesla Testing]$
Run Code Online (Sandbox Code Playgroud)

屏幕如何恢复?

Geo*_*e M 21

“清除”和“恢复”屏幕实际上是您使用的终端仿真器的功能(xterm, gnome-terminal, konsole, screen)。

默认情况下,使用的寻呼机manless.

man 1 man

   -P  pager
          Specify  which pager to use.  This option overrides the 
          MANPAGER environment variable, which in turn overrides 
          the PAGER variable.  By default, man  uses /usr/bin/less -is.
Run Code Online (Sandbox Code Playgroud)

less被调用时,终端模拟器会启动一个 altscreen 来显示手册页的内容。当less退出时,altscreen被破坏,终端显示什么保存在缓冲区中。

有一个答案here进一步讨论了这一点以及如何防止程序less启动 altscreen 从而在退出时清除屏幕。简而言之,您可以定义一个环境变量,以便less在调用时不会启动 altscreen。如果您使用 bash,请将其放在 ~/.bashrc 中:

export MANPAGER="/usr/bin/less -r -X -is"

  • vim 尊重终端模拟器中的 altscreen。您可以在 ~/.vimrc 中添加类似的内容 - "set t_ti= t_te=" 以更改 vim 使用的终端功能。 (3认同)