我认为手册页是有关已安装软件的文档的主要来源。我不仅想将它们用作参考,而且还想从头到尾真正阅读它们。
问题来了。当我关闭手册页时,下次我希望它在我离开的地方打开。是否可以?
理想情况下,它可以使用 less,这是默认的系统寻呼机。但我可以将其更改为任何可以实现这一目的的寻呼机。
例如,独立的 vim 会记住上次读取文件的位置。可能有某种方法可以将其用作寻呼机来记住位置。
请在发表评论/答案之前尝试您的想法。
答案1
这是一个解决方案TXRLisp,使用 Vim 作为查看器。在 Ubuntu 18 上与 Vim 8.0 配合使用。
(请翻译成您最喜欢的语言;这是我的,我自己做的。)
该文件被调用mnpgr.tl
并位于某个位置/path/to/mnpgr.tl
:
#!/usr/bin/env txr
(defvarl home-dir (getenv "HOME"))
(defvarl mnpgr-dir (path-cat home-dir ".mnpgr-dir"))
(defvarl vim-commands
(join-with "|"
'("hi def link CtrlHUnderline Special"
"hi def link CtrlHBold Keyword"
"set syntax=ctrlh"
"syntax match CtrlHHide /.\\b/ contained conceal"
"set conceallevel=2"
"set concealcursor=nc"
"map q :q!\r")))
(ensure-dir mnpgr-dir)
(match @(or `@page(@section)` ;; for "man whatever"
`@page\\.@section`) ;; for "man -l file.1"
(getenv "MAN_PN")
(with-resources ((rendered-file (path-cat mnpgr-dir `@page.@section`)
(remove-path rendered-file)))
(with-stream (s (open-file rendered-file "w"))
(whilet ((line (get-line)))
(put-line line s)))
(sh `vim +'@{vim-commands}' '@{rendered-file}' < /dev/tty`)))
我们使用以下命令将其安装为手册页程序:
export MANPAGER=/path/to/mnpgr.tl
笔记:
该程序使用您
$HOME
调用的.mnpgr-dir
.它捕获输出
man
并将其保存到工作目录中的文件中。文件名是根据MAN_PN
环境变量计算得出的,该变量为我们提供了手册页和节号。我们在该文件上运行 Vim。因为它有一个稳定的名称,Vim 可以记住最后一个位置。
我们不需要保留该文件,因此将其删除。 (我使用
with-resources
宏进行范围资源控制。)该文件包含
^H
(退格)重印编码。 Vim 8 有一个 2005 年的语法定义,它提供了一个名为ctrlh
.不幸的是,它不太有效。它对重击字符使用Ignore
突出显示组,不会被隐藏。我怀疑旧的 Vim 版本可能隐藏了Ignore
突出显示组。我们使用+
Vim 命令行的功能注入一些命令来选择ctrlh
语法并对其进行热补丁以使其表现更好。我们还将粗体和下划线突出显示组重新分配为彩色类别,而不是默认的粗体和下划线。我们添加一个
map
命令以便q退出。这个想法是抄袭自 Vim 的+MANPAGER
模式。 (我们不使用它,+MANPAGER
因为它要求页面呈现为纯文本,没有退格键,然后强加黑客man
语法突出显示,其中所有原始粗体和下划线标记都会丢失。)
错误:
通过退格重划突出显示的项目不可搜索。这是一件大事,而且可能会成为一个大事件。处理它的一种方法是使用预处理器将项目转换为另一种表示法。例如,带下划线的单词
_^Hw_^Ho_^Hr_^Hd
可以转换为^word^
.适当的语法突出显示定义将隐藏下划线并对单词进行着色,使单词可搜索。这正是 Vim 手册中突出显示的单词的工作原理。如果您使用 重新加载手册页
:e %
,则会丢失语法的热补丁ctrlh
,因此您会看到所有退格键以及^H
过度打印的字符。为了更好的解决方案,我们应该定义自己的语法突出显示定义文件类型和语法,例如mnpgr
,并将其用作文件的后缀。不会区分与同名冲突的手册页。如果您有时使用以下命令查看手册页
man -l <file>
,并且您的系统在/usr/share/man
.例如,假设您在系统和您查看的树中克隆了 GNU Bash 的源代码man -l bash.1
。假设您也使用man bash
(谁不使用)。这两个都映射到渲染的文件~/.mnpgr-dir/bash.1
。sh
使用函数,就像Csystem()
中的一样;存在潜在的逃避问题。如果vim-commands
或rendered-file
要包含单引号,则会破坏围绕它们的单引号。
这现在是一个迷你项目谁的家在这里。
它有自己的Vim语法定义文件mnpgr.vim
。该程序解析退格重击并生成自己的符号,由 处理mnpgr.vim
。
答案2
如果会话不必在重新启动后继续存在,则可以仅使用 POSIX 作业控制。使用 Ctrl-Z将man
作业置于后台,然后使用 返回fg
。
$ jobs
[1] Stopped man gcc
[2]- Stopped man bash
[3]+ Stopped info make
如果我想继续阅读我上次停下来的 Bash 手册页,只需
$ fg %2
答案3
您可以将手册页格式化为 PDF 并使用您最喜欢的 PDF 查看器阅读它们。这样做的另一个好处是让您看到实际的排版,而不是局限于字符单元终端模拟器的功能。
举个例子,格罗夫自己的手册页格式为单个 383 页文档。
如果你有一堆未压缩的男人(7) 和/或文档(7) 文件方便,试试格罗夫1.23.0 以获得最佳结果。
groff -Rpet -mandoc -Tpdf page.1 page.2 page.3 ...
但您也可以使用以下命令轻松查看各个手册页文档男人, 当然。
zcat -f $(man -w groff_man) | man -l -Tpdf - >| groff_man.pdf
上述用途人数据库2.9.4 为其男人执行。