it-swarm.cn

如何遵循Linux手册页中的链接?

有没有一种方法可以跟踪手册页中提到的链接?例如,这是ps的手册页;如何访问标记为红色的链接?

Screenshot of the ps man page

101
its_me

手册页可以追溯到 nix第一版 。虽然发明了 超文本 ,但仍处于起步阶段。网络距今已有二十年的路程,而手册则是一本实际的印刷书籍,如果适合的话,通常每页一个命令(这就是为什么将其称为页面)。

从那时起,手册页所使用的格式有所发展,但是大多数页面并不是真正为超文本设计的,并且默认的man程序不支持它(它只是纯文本查看器,有黑客支持某些基本格式)。但是,有一些手册页查看程序可以重构一些超链接,主要是指向其他手册页的链接,这些链接通常以man(1)的形式编写,其中man是手册页的名称,而1节号

  • tkman ,带有超链接的GUI手册页查看器
  • WoManwikiman比较以前 ),用于Emacs的手册页浏览器,支持超链接
  • man2html ,一个人到HTML的转换器(加上Web浏览器以读取结果)

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

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

55

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

普通的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/

39
Caleb

这是很晚的回复,但请使用w3mman。 w3mman是w3m的系统手册寻呼机。

https://linux.die.net/man/1/w3mman

您可以通过安装w3m软件包来尝试。我相信此软件包已在大多数主要Linux/UNIX发行版和Cygwin的软件存储库中注册。

13
akawaguc

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

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

!man top

要么

!man 1 top

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

11
Anne van Rossum

尽管w3mman是一种跟踪链接的解决方案,但并未使用所有屏幕(至少在ubuntu 12.10上如此)

我更喜欢使用:

$ Sudo su -
# apt-get install w3m man2html
# exit
$ alias man=' hman -P w3m'

将最后一个命令添加到〜/ .bash_aliases或类似的启动脚本中,以在每个会话中获取它。

-P w3m是因为到hman的第一个浏览器是 lynx明智的浏览器 ,但是我喜欢 w3m

hman是捆绑在html2man上的工具。参见 this

如果退出确认对您来说很烦,对我来说就是 this

2
albfan

就像他们说的那样,它不是为此而设计的。

您可以使用 info man,然后在项目的另请参阅部分下按Enter键。

信息-阅读信息文档

2
binarytrails

专门针对Ubuntu,有Yelp。它是默认安装的,并且默认情况下能够显示手册页,尽管这样做与man命令的调用不同;别名或Shell函数可以解决后一点(取决于Shell)。

Yelp 'man:exit'

默认情况下,它将以我不知道的方式显示到某个部分。提醒:要获取手册主题的列表,请使用whatis,如whatis exit

要请求Yelp显示特定部分(例如2)的手册页,请执行以下操作:

Yelp 'man:exit(2)'

问题:Yelp存在错误,并准备从命令行调用它时输出多个错误。另外,别名或自定义Shell函数可以帮助将所有错误重定向到/dev/null

2
Hibou57

我有(一对)黑客。

骇客1

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

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

截图..

manual in vim screenshot

腹水..

https://asciinema.org/a/130131

现在..

  1. 例如,当您输入man vim时,它将在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扩展名保存它,则可以通过运行:set ft=man来将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 "[email protected]"; do
        command man "$arg" > "/tmp/${arg}.man"
        args+=("/tmp/${arg}.man")
    done
    vim "${args[@]}"
}

截图..

multiple manuals in 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>"之类的操作或执行诸如此类的疯狂操作(未经测试的
2
Dylan

我能够使用man--html参数,以便在$ BROWSER环境变量定义的浏览器中打开它,因此:

BROWSER=google-chrome man ps --help

我正在使用Fedora。不确定这是否适合您的发行版,请测试并在评论中报告。

1
tutuDajuju