使用 Vim 作为手册页程序时如何防止手册页名称被截断?

使用 Vim 作为手册页程序时如何防止手册页名称被截断?

考虑这个 shell 命令:

$ MANPAGER='vim -Nu NONE -R -' man git-credential-cache

它使显示Vim 中man(1)的手册页。git-credential-cache(1)

但是,手册页的名称(显示在缓冲区的第一行上)是GIT-CREDENTIAL-CAC(1)。请注意HE名称末尾如何缺失:

git-credential-cache 手册页的名称缺少最后两个字符

我希望用这个名字来代替:

GIT-CREDENTIAL-CACHE(1)
                  ^^

我跑去strace(1)看使用了哪些系统调用man(1)

$ MANPAGER='vim -Nu NONE -R -' strace -o log man git-credential-cache

在日志文件的末尾,我可以看到一个使用缓冲区名称的系统read(2)调用:write(2)GIT-CREDENTIAL-CAC(1)

read(7, "GIT-CREDENTIAL-CAC(1)           "..., 4096) = 2720
...
write(8, "GIT-CREDENTIAL-CAC(1)           "..., 2720) = 2720

所以看起来是它man(1)而不是vim(1)它截断了手册页的名称。

以下是该文的全部内容日志档案, 其他日志档案包含相同命令的输出strace(1),但带有附加-f参数来跟踪子进程,以及通向该man(1)进程的进程树:

$ pstree -lsp $(pidof man)
systemd(1)---lightdm(947)---lightdm(1114)---upstart(1123)---sh(1324)---xfce4-session(1335)---xfce4-panel(1347)---panel-8-whisker(1396)---xterm(22546)---bash(22547)---strace(23182)---man(23184)---vim(23194)

有没有办法防止man(1)截断GIT-CREDENTIAL-CACHE(1)GIT-CREDENTIAL-CAC(1)

我之所以问这个问题是因为截断导致使用时显示错误消息Neovim 人插件:

            ┌ Taken from `:h man.vim` in Neovim
            ├────────┐
$ MANPAGER='nvim +Man!' man git-credential-cache
man.vim: command error (7) man -w git-credential-cac: No manual entry for git-credential-cac

Neovim 中由于手册页名称被截断而出现错误


环境:

$  lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.6 LTS
Release:        16.04
Codename:       xenial

$ man --version
man 2.7.5

$ vim --version | head -n2
VIM - Vi IMproved 8.1 (2018 May 18, compiled Sep  3 2019 11:05:36)
Included patches: 1-1967

$ nvim --version | head -n1
NVIM v0.4.0-1856-g82d52b229

答案1

也不是man谁在截断它:

$ zcat /usr/share/man/man1/git-credential-cache.1.gz | head -n 10
'\" t
.\"     Title: git-credential-cache
.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
.\"      Date: 09/28/2018
.\"    Manual: Git Manual
.\"    Source: Git 2.11.0
.\"  Language: English
.\"
.TH "GIT\-CREDENTIAL\-CAC" "1" "09/28/2018" "Git 2\&.11\&.0" "Git Manual"

所以你必须摆弄任何git用来生成其手册页并重建它们的东西(上次我检查过它们正在使用asciidoc——宇宙中最慢的东西;-))。

相关内容