Man Pages 本身很棒,问题在于 Man Page 阅读器
Man Pages 本身很棒,问题在于 Man Page 阅读器
2025-04-09 #documentation #man #unix TLDR: Man Pages 支持链接,但 Man Page 阅读器既不显示也不允许跟随这些链接。
人们经常批评 Man Pages “彼此之间没有链接” 和 “如果我把窗口调窄,它们不会自动换行”。这些都是完全合理的抱怨,但事实是 Man Pages 实际上支持这些特性:只是我们用来阅读 Man Pages 的程序没有实现它们。
格式
Man Pages 以 mdoc(7) 格式和传统的 man(7) 格式1 存储。 这些文件的实际格式不是世界上最容易阅读的,但绝对不比 XML 或 JSON 糟糕。 mdoc
具有纯语义标记。一个 mdoc
Man Page 的一部分看起来像下面这样2:
.Sh NAME
.Nm openrc
.Nd stops and starts services for the specified runlevel
.Sh SYNOPSIS
在这种情况下,.Sh
、.Nm
和 .Nd
是宏,它们将后面的文本分别标记为 “节标题”、“文档名称” 和 “文档描述”。如果你尝试手动读取或编辑这些文件,你需要查阅 macro overview。
引用 ("链接")
有两个宏特别值得关注:
这两个宏都可以渲染为链接。 事实上,当 mdoc(7) 页面被转换为 HTML 时,这两个宏都会被转换为实际的链接。 上面链接的两个 Man Page 都包含了这方面的例子。 .Sh
(section header) 宏渲染为一个锚点,因此链接可以直接指向它。
具有讽刺意味的是,mdoc(7) 的文档在浏览器上以 HTML 格式显示时会渲染链接,但在终端中通过 man(1) 命令显示时则不会。
结论
我们需要更好的 Man Page 阅读器。 能够让我们将引用作为链接来追踪的阅读器。
目前,man(1) 格式化 Man Page 并将其通过管道传递给 less(1)。 我们无法轻易地在此处添加对链接的支持:我们需要一个能够原生理解 Man Pages 的 pager。
顺便说一句,我们还可以在终端窗口变窄时重新排列文本。
- 当我在这里说 “传统” 时,我是认真的。 man(7) 的文档表明它从 1979 年使用到 1989 年,而 mdoc(7) 首次出现在 20 世纪 90 年代初,在 4.4BSD 中。 ↩︎
- 此示例是从 OpenRC’s man pages 复制粘贴的。 有关完整的示例和许可详细信息,请参阅存储库。 ↩︎