如何跟踪 Linux 手册页中的链接?

如何跟踪 Linux 手册页中的链接?

有没有办法跟踪手册页中提到的链接?例如,这是ps;的手册页。如何访问屏幕截图中带下划线的红色圆圈链接:top(1)

ps 手册页的屏幕截图

答案1

手册页可以追溯到Unix 第一版。尽管超文本被发明出来时,它还处于起步阶段;距离网络还有二十年的时间,手册是一本真正的印刷书籍,如果合适的话,通常每页有一个命令(这就是它们被称为页面的原因)。

从那时起,用于手册页的格式已经有所发展,但大多数页面并不是真正为超文本设计的,并且默认程序man不支持它(它只是一个纯文本查看器,带有支持一些基本格式的技巧)。然而,有些手册页查看程序会重建一些超链接,主要是指向其他手册页的链接,这些链接传统上以以下形式编写,man(1)其中man是手册页的名称,1节号:

man2html您可以在许多在线站点上浏览多个操作系统的手册页,并通过类似工具将其转换为 HTML ,例如:

在手册页成为 UNIX 上既定文档格式之后的一段时间以及 Web 发明之前的一段时间,GNU项目介绍了信息文档格式,比 man 更先进,同时坚持为文本终端设计的简单标记。与人类相比,信息的主要创新是拥有多页文档以及指向其他页面的超链接。 Info 仍然是 GNU 项目的首选文档格式,尽管大多数 Info 页面都是从德克萨斯信息网也可以生成 HTML 的源(或有时其他格式)。当程序的信息文档存在时,它通常是主手册,而手册页仅包含有关命令行参数的基本信息。

答案2

首先,这不是一个链接。这只是一个下划线。手册页只是带有终端可以处理的一些简单格式的文本文档。下划线只是一个突出显示,不涉及“链接”。

普通man命令只是一个文本格式化程序。事实上,该man命令甚至不显示文本,只是格式化存储在手册页文件[1]man中的信息,并将格式化的输出发送到另一个程序(通常),该程序将格式化的输出显示到屏幕上。这些显示程序没有链接的概念。less

有一些特殊的文档读者可能能够查看这样的格式并做出有根据的猜测,这样的突出显示可能表明存在可以拉出并创建链接的相关手册页,但我不知道哪些是这样做的。也许pinfo

如果您想要带有超链接的类似 Web 的格式,您可以在网上找到几乎所有添加了链接的 UNIX 手册页。尝试man [anything]在 google 中输入内容,您几乎肯定会在前几次点击中找到一个。

在您的示例中,视觉突出显示是一个线索,表明这是另一个程序名称,它有自己的手册页,您可以轻松地调出该手册页。尝试man 1 top。 1 表示要查看的手册页部分。有关各部分的说明,请参阅此问题:手册页中的数字是什么意思?


[1]如果您man在文本编辑器中打开页面文件,您将看到man未格式化以方便阅读的原始页面。原始man页面是用称为 的标记语言编写的troff。有关troff如何编写man页面的更多信息,请参阅:https://liw.fi/manpages/

答案3

我建议w3mman,系统的手动寻呼机通过w3m命令行浏览器进行。它为链接着色并允许通过它们进行选项卡切换

您可以通过安装该软件包来尝试w3m,大多数软件存储库和 Cygwin 中都提供该软件包。

答案4

我有一个(几个)黑客。

黑客1

将其放入 ~/.bashrc 或 ~/.zshrc 中

function man(){
    for arg in "$@"; do
        vim -c 'execute "normal! :let no_man_maps = 1\<cr>:runtime ftplugin/man.vim\<cr>:Man '"${arg}"'\<cr>:wincmd o\<cr>"'
    done
}

截屏..

vim 中的手册截图

阿西内玛..

https://asciinema.org/a/130131

现在..

  1. 例如,当您输入 时man vim,它将打开此手册页维姆

    • man man vim例如,如果你输入,它会先打开man的手册,退出 vim 后,它会打开vim的手册
  2. 当您按下K(这是大写k)时,当您位于底部的另一个手册页时(也可以看看部分),您将跳转到本手册(不幸的是在更少的寻呼机——这是因为我们有let no_man_maps = 1;如果你不这样做,那么 vim 将强制q这样做:q,你将无法轻松地录制宏,并且 vim 可能会在其他方面表现得不稳定)。

    • 退出您输入的第二本手册将使您返回到您正在查看的上一本手册
  3. 自从你加载后,你会得到非常漂亮的语法突出显示ftplugin/man.vim并且 ft (自动)设置为man

  4. 您可以复制和粘贴,在 vim 中自由导航,甚至修改缓冲区和:w ~/usefulfile.您可以执行在 vim 中通常执行的所有操作,包括记录宏、使用 复制到剪贴板"+y(如果有的话+clipboard)等等。

我觉得它比较少的

我发现的唯一一个小挫折(如果你使用 less 作为寻呼机,这个挫折仍然存在)是你想在一个 vim 会话中打开多个手册。我真的没有办法做到这一点。

一些注意事项:

  1. 如果你尝试保存缓冲区,你会得到E382: Cannot write, 'buftype' option is set

    • 我喜欢你不能保存,因为它可以防止意外保存
  2. 你仍然可以保存:w /tmp/man.man

    • 如果您使用扩展名保存它.man,那么打开它会将文件类型设置为man适合您
    • 如果您不使用扩展名保存它,您可以通过运行.man将 ft 设置为man:set ft=man
  3. autocmd VimEnter *.~ echom 'hooray, we are using vim for man pages!'例如,如果您需要在打开手册页时执行某些操作,则可以使用。

  4. 我已将以下内容放入我的 vimrc 中,以便我可以按K尝试打开手册,然后按G返回上一个手册:


augroup man
    autocmd!
    autocmd VimEnter *.~ nnoremap B :execute "normal! `Z"<cr>
    autocmd VimEnter *.~ nnoremap <buffer> K :execute "normal! mZyiw:Man \<lt>c-r>\"\<lt>cr>"<cr>
augroup END

黑客2

把它放在你的 ~/.bashrc 或 ~/.zshrc 中

function man(){
    declare -a args
    for arg in "$@"; do
        command man "$arg" > "/tmp/${arg}.man"
        args+=("/tmp/${arg}.man")
    done
    vim "${args[@]}"
}

截屏..

vim 中的多个手册

阿西内玛..

https://asciinema.org/a/9Q6Si90Pi46cDVUknxFxfIwsv

这解决了问题黑客1较少的面(现在你可以在一个缓冲区中查看多个手册),但它不太优雅。

笔记:

  1. 重要的如果你想黑客2工作,那么你必须把:let no_man_maps = 1你的~/.vimrc.这是因为 vim 会源.../vim80/man.vim并将q被强制重新映射到:q.

  2. 涉及更多清理工作(现在您将每个手册存储到/tmp/*.man

  3. 但是,您现在可以在一个会话中查看多个手册页,如上所述

  4. 如果你按K,你仍然会打开一个新的 vim 会话,但是

    • 如果你愿意,你可以绑定一个autocmd(使用像上面那样的autocmd)来做类似的事情autocmd VimEnter man.~ nnoremap <buffer> K :execute "normal! Byt(:silent !man \<c-r>\" > /tmp/\<c-r>\".man\<cr>:edit /tmp/\<c-r>\".man\<cr>"或类似的疯狂的事情(未经测试的

相关内容