如何向手册页添加行号?

如何向手册页添加行号?

如何在 Linux 中向man页面或页面添加行号?info我想使用行号在手册页中导航。我可以将手册页写在一个文件中,然后用 Vim 打开它,但是有更好的方法吗?

答案1

man man

   -P pager, --pager=pager
          Specify  which  output  pager to use.  By default, man uses less
          -s.  This option overrides the $MANPAGER  environment  variable,
          which  in turn overrides the $PAGER environment variable.  It is
          not used in conjunction with -f or -k.

          The value may be a simple command name or a command  with  argu-
          ments, and may use shell quoting (backslashes, single quotes, or
          double quotes).  It may not use pipes to connect  multiple  com-
          mands;  if  you  need that, use a wrapper script, which may take
          the file to display either as an argument or on standard input.

因此,您可以指定寻呼机带有less-N编号标志。

man -P "less -N" 

问题是man根据终端的列数设置页面的宽度,但是行号在行less的开头添加了额外的字符(空格+行号),因此输出的格式将是有点乱。

$ man -P "less -N" man

结果:

      1 MAN(1)                        Manual pager utils                        M
      1 AN(1)
      2 
      3 
      4 
      5 NAME
      6        man - an interface to the on-line reference manuals
      7 
      8 SYNOPSIS
      9        man  [-C  file]  [-d]  [-D]  [--warnings[=warnings]]  [-R encoding
      9 ] [-L
     10        locale] [-m system[,...]] [-M path] [-S list]  [-e  extension]  [-
     10 i|-I]
     11        [--regex|--wildcard]   [--names-only]  [-a]  [-u]  [--no-subpages]
     11   [-P
     12        pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation] [--no-jus
     12 tifi-
     13        cation]  [-p  string]  [-t]  [-T[device]]  [-H[browser]] [-X[dpi]]
     13  [-Z]
     14        [[section] page ...] ...

因此,您可以更改环境变量,从 的数量中MANWIDTH减去 7 个字符(行前缀的宽度),以强制格式化宽度较短的页面。lessCOLUMNSman

$ MANWIDTH=$(( $COLUMNS -7 )) man -P "less -N" man

结果:

      1 MAN(1)                     Manual pager utils                     MAN(1)
      2 
      3 
      4 
      5 NAME
      6        man - an interface to the on-line reference manuals
      7 
      8 SYNOPSIS
      9        man [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L
     10        locale] [-m system[,...]] [-M  path]  [-S  list]  [-e  extension]
     11        [-i|-I]  [--regex|--wildcard] [--names-only] [-a] [-u] [--no-sub-
     12        pages] [-P pager] [-r prompt] [-7]  [-E  encoding]  [--no-hyphen-
     13        ation]   [--no-justification]   [-p   string]  [-t]  [-T[device]]
     14        [-H[browser]] [-X[dpi]] [-Z] [[section] page ...] ...

答案2

打开联机帮助页,点击-N然后输入。 (-、然后ShiftN、然后Enter

例如man man::

  1 MAN(1)                                             Manual pager utils                                             MA      2 
  3 NAME
  4        man - an interface to the system reference manuals
  5 
  6 SYNOPSIS
  7        man [man options] [[section] page ...] ...
  8        man -k [apropos options] regexp ...
  9        man -K [man options] [section] term ...
 10        man -f [whatis options] page ...
 11        man -l [man options] file ...
 12        man -w|-W [man options] page ...

删除行号-n Enter

为了避免重复行,请设置MANWIDTH变量。LESS变量设置为-N打印行号:

MANWIDTH=100 LESS=-N man man

答案3

man输出长行并假设您有一个类似的寻呼机less

请注意,特定手册页的输出中的行号可能会有所不同,因为man根据运行它的窗口宽度来换行。

尝试类似的方法:

COLUMNS=72 man --pager='cat' -s 3 printf | nl -ba > Man.printf

fold在输出上使用该命令很丑陋,因为man即使它没有写入 tty,也使用 COLUMNS 变量来分隔行,然后fold将所有单词间距重新设置为单个空格。

您可能希望将其包装在脚本中,以将-s 3节号和页面名称放入参数中。

答案4

其他人已经给出了可行的解决方案,所以我想添加一个替代方案:

安装以下2个包:

后者将安装一个名为的应用程序batman,这不仅会为您的手册页着色,还会添加行号。

下面是输出的示例:

在此输入图像描述

(我输入的命令很简单batman emerge

如您所见,batman它会自动为您处理显示宽度。

相关内容