我辞职后如何保持从人那里读到的内容?


24

因此,我们man whatever用来获取有关whatever命令的用法和其他信息,当找到相关信息部分时,我想man使用屏幕上剩余的信息退出该命令。因此,我可以与上面的裁判员键入下一个命令。但是该man命令退出整个屏幕以恢复类似于的旧屏幕vim。有没有办法做到这一点?



所有建议都是好的,但是您也可以打开第二个窗口来查看手册页。并且可能还有GUI手册页查看器。
Barmar

Answers:


38

我相信这与其说是有关man本身,不如说是您选择的寻呼机(PAGER环境变量)与使用中的终端相结合。

我猜您的传呼机可能是less(如今是典型的默认传呼机,并且符合说明)。

less有一个选项-X可以使您的行为符合您的期望。

   -X or --no-init
          Disables sending the termcap initialization and deinitialization
          strings  to  the  terminal.   This is sometimes desirable if the
          deinitialization string does something unnecessary, like  clear‐
          ing the screen.

例如PAGER="less -X" man man,可以使用它进行测试,如果发现此行为更好,则可以考虑将PAGER其永久设置为该值。


不幸的是,它弄乱了滚动历史。
musiKk

@musiKk在具有智能unicode终端(不是Linux控制台)和man 2.7.5的Ubuntu 16.04上对我来说工作正常

3
@musiKk:如果希望退出分页器后能够在手册页中向后滚动,则必须限制自己在手册页中(按行或页面)向前滚动,而不是通常的随机访问。
彼得·科德斯

1
或者,您可以使用LESS=-X来避免更改PAGER(我不能100%地相信它可以在所有具有此类空间的程序中工作,尽管它可以在人中工作。)
Random832

11

如果您的页面调度程序运行得很少(这是很常见的),则无需处理修改页面调度程序,只需执行I / O重定向即可:

man <whatever you want to man> | cat -

这会将副本打印到终端,以便您在需要时可以向上滚动。


1
这种方法的一个问题是,在较长的手册页中,可能难以滚动回到您感兴趣的部分,并且您将看不到该部分和当前命令行。
jlliagre

没有其他建议可以解决此问题-它只是单个控制台窗口中固有的。但是这样说,您可以随时编写命令,向上滚动一点,然后向下滚动到半写命令。
Brennen Smith

我的建议肯定可以解决这个问题。当您感兴趣的手册页出现在屏幕上时,您可以离开man命令,并且您可以在该页面仍显示在同一屏幕上的情况下键入命令。
jlliagre

2
-表示标准输入,但cat无论如何都假设是
loa_in_16年

1
它主要用于语义-我一直喜欢对stdin进行明确说明。
Brennen Smith

5

由于不仅less其他文本应用程序也vim显示出同样令人讨厌的功能,所以我要做的就是从终端中删除终端支持所涉及命令的terminfo功能。

这些命令是smcuprmcup,旨在允许打开和允许cup命令(光标位置)的移动。

这是我用来使任务自动化的shell函数,它至少适用于Solaris和大多数Linux发行版:

fixterminfo()
{
  (
    [[ ! -d /tmp/terminfo ]] && { mkdir /tmp/terminfo || return ; }
    cd /tmp/terminfo || return
    TERM=xterm infocmp > xterm.src.org
    sed -e 's/rmcup=[^,]*,//'  -e 's/smcup=[^,]*,//' xterm.src.org > xterm.src
    if diff xterm.src.org xterm.src
    then
      echo xterm terminfo already patched
      return
    fi
    TERMINFO=/tmp/terminfo tic xterm.src
    if [ -f /usr/share/lib/terminfo/x/xterm ] ; then
      XTERM=/usr/share/lib/terminfo/x/xterm
    else
      if [ -f /lib/terminfo/x/xterm ] ; then
        XTERM=/lib/terminfo/x/xterm
      else
        if [ -f /usr/share/terminfo/x/xterm ] ; then
          XTERM=/usr/share/terminfo/x/xterm
        else
          echo xterm terminfo not found ; return
        fi
      fi
    fi
    if [ ! -f ${XTERM}.org ]
    then
      sudo cp ${XTERM} ${XTERM}.org || return
    fi
    cat /tmp/terminfo/x/xterm | sudo dd of=${XTERM}
  )
}

如果您的终端条目没有回退到xterm,则应xterm在脚本中用正确的终端名称替换。


1
是的,但那么这个中断其他节目(不一定寻呼机或诅咒,但readline的样编辑等)

1
@cat并不是我检查了任何现有程序,但是使用此替代方法后,我再也没有注意到其他程序的任何问题。您是否有一些程序表现异常的示例?我也怀疑他们是否失败,这是他们方面的问题。终端仿真器不应该支持那里的每一个terminfo功能。它只是公布它支持的对象,并由应用程序来处理。
jlliagre


2

在不修改寻呼机的情况下,具有可以在大多数环境中工作的管道的解决方案:

例子 man ls

  • 将整个手册页留在屏幕上man ls | cat
  • 读取分页的man输出,并可能随时将其保留给qman ls | more
  • 用模式过滤man内容,并在屏幕上保持匹配的行:man ls | grep somestring

-3

现在是2016年,只需打开第二个终端,选项卡或窗口或在线阅读该信息即可。


这是显而易见的实际解决方案。
Braiam

1
@Braiam如果终端在手机屏幕上,则不可行。
NathaneilCapital

@NathaneilCapital听起来是时候学习tmux。
迈克尔汉普顿

-3

即使在我的服务器(FreeBSD)上,我也会安装X和xfce。然后,我为终端仿真器分配了一个大缓冲区(例如10000行),这样我就可以在其中一个中完全滚动出手册页,并使用单独的终端实例来组装命令。工作请客。

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.