在 Vim 中查看手册页

在 Vim 中查看手册页

我在Bash中写了一个函数来看看男人Vim 中的页面:

viman () { man "$@" | vim -R +":set ft=man" - ; }

这工作正常,如果我向它传递一个不存在的手册页,则会出现唯一的问题。它打印出手册页不存在,但仍然vim以空缓冲区打开。
因此,我更改了函数来检查错误代码(位于16此处),如果页面不存在则退出。修改后的函数看起来有点像这样:

viman () { man "$@" | [[ $? == 16 ]] && exit 1 | vim -R +":set ft=man" -  ; }

但是,现在它没有任何作用。

如果手册页不存在,我只想退出程序,否则使用vim.

答案1

试试这个:捕获 man 输出,如果成功启动 vim

viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man" - ; }

答案2

我喜欢检查返回码的想法man;但你不能通过管道进行测试。你可以只运行man两次:

viman () { man "$@" >/dev/null 2>&1 && man "$@" | vim -R +":set ft=man" - ; }

man ... | vim ...仅当第一次调用man成功时才会运行。

答案3

有一个名为 的环境变量MANPAGER,可用于调用man您想要显示联机帮助页的命令。这样做的优点是您可以man直接调用,并且如果手册页不存在,则根本不会运行分页程序。

所以一个包装脚本,如下所示~/bin/vimman

#! /bin/sh
vim -R +":set ft=man" -

在你的 shell 初始化文件中的某个地方:

export MANPAGER="$HOME/bin/vimman"

您可以直接运行man fooVim 中的联机帮助页。

(根据man所使用的命令,您还可以:

export MANPAGER='vim -R +":set ft=man" -'

而不是直接使用包装脚本。)


如果您有足够新的 Vim,您可以使用该--not-a-term选项来阻止 Vim 抱怨 stdin 不是 TTY。


无耻插件:我写的一个小插件方便使用 Vim 作为手册页。

答案4

基于这个答案这将启动 vim,如果缓冲区中没有任何内容,则退出。缺点是启动vim时屏幕会“闪烁”。当man找不到页面时,它也不会设置退出代码。

viman () { vim -R +':set ft=man|exe !search(".")?"quit!":""' <(man "$@" 2>/dev/null); }

这是对 Jeff Schaller 答案的改进,因为它不会man在页面存在时加载页面两次。它也不会vim像我之前的示例那样不必要地加载。还有它设置没有man页面时的退出代码。

viman () { man -f "$@" >/dev/null 2>&1 && vim -R +":set ft=man" <(man "$@"); }

这两个示例都使用 Bash 进程替换以避免出现“Vim: Reading from stdin...”消息。

两者都不将页面加载到变量中。

相关内容