如何关注 linux 手册页中的链接?

its*_*_me 118 man hypertext

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

ps 手册页的屏幕截图

Gil*_*il' 65

手册页可以追溯到Unix 第一版。虽然已经发明了超文本,但它仍处于起步阶段。距网络还有 20 年的时间,而手册是一本真正的印刷书,如果合适,通常每页有一个命令(这就是为什么它们被称为页面的原因)。

从那时起,手册页使用的格式发生了一些变化,但大多数页面并不是真正为超文本设计的,并且默认man程序不支持它(它只是一个纯文本查看器,具有支持一些基本格式的技巧)。然而,有那一些重建超链接手册页观看节目,主要是链接到其他人的页面,这是传统的书面形式man(1)哪里man是男人页面的名称,1款号

  • tkman,一个带有超链接的 GUI 手册页查看器
  • WoMan ( wiki , man comparsion ,以前), Emacs 的手册页浏览器, 支持超链接
  • man2html,一个人到 HTML 转换器(加上一个网络浏览器来读取结果)

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

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

  • 很好的答案!另外值得一提的是,Emacs 中还有另一种手册页模式,(至少我)只通过 `Mx man`(而 `Ch v mode-name` 是 `Man`):至少在一个方面,它优于`WoMan`,因为它显示表格([屏幕截图](http://unix.stackexchange.com/q/45093/13136))。当然,它也是超链接的。 (8认同)
  • 信息程序的用户界面感觉错误且违反直觉。我还没见过有人用过它。 (6认同)
  • @PavelŠimerda> *信息程序用户界面感觉是错误的和违反直觉的。* <嗯,与什么相比?到less(1)(这是GNU 中man(1) 的默认寻呼机)——那个东西,你必须回忆起如何*scroll back*,因为<backspace> 没有被绑定(并且<pgup> 可能无法在全部)?通过这种方式,主键是`b`。对于哪种界面范式的用户来说,这可能是直观的? (2认同)

Cal*_*leb 44

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

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

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

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

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


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

  • @Aahan 它是 man 1 top 因为您想在在线手册页的第一部分中查看 top 命令的手册页。参考 top(1) 的意思就是,top 在手册页的第一部分。要查看它,请在提示符下键入“man 1 top”。见“男人” (2认同)

小智 14

我建议w3mman通过 w3m 命令行浏览器查看系统手册页。它为链接着色并允许通过它们进行选项卡

您可以通过安装该w3m软件包来尝试它,该软件包可在大多数软件存储库和 Cygwin 中使用。


Ann*_*sum 12

让我尝试从某种意义上解释您的问题,即我尝试遵循您的工作流程。您可能想要的是man页面中的组合键,可将您直接引导至您正在阅读的带下划线的命令。因此,不必安装其他东西,也不必打开另一个控制台并忘记确切的语法。

这个最简单的解决方案是感叹号(如果您less用于显示手册页)并且您想要转到带下划线的top

!man top
Run Code Online (Sandbox Code Playgroud)

或者

!man 1 top
Run Code Online (Sandbox Code Playgroud)

您必须q多次按下才能将它们全部关闭。另请注意,如果LESSSECURE=1设置为环境变量,这将无法less在安全模式下运行并且不允许您使用!. 它会告诉您诸如“命令不可用”之类的信息。


Dyl*_*lan 6

我有一个(几个)黑客。

黑客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
}
Run Code Online (Sandbox Code Playgroud)

截屏..

vim 中的手册截图

阿西内玛..

https://asciinema.org/a/130131

现在..

  1. 例如,当您输入 时,它将在vimman vim中打开此手册页

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

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

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

我发现它比less好得多。

我发现的唯一一个小挫折(如果你使用 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
Run Code Online (Sandbox Code Playgroud)

黑客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[@]}"
}
Run Code Online (Sandbox Code Playgroud)

截屏..

vim 中的多个手册

阿西内玛..

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

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

笔记:

  1. 重要的是如果你想让hack2工作,那么你必须将: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>"或类似的疯狂的事情(未经测试