我在 bash 中编写了一个函数以manpages
在 vim中查看
viman () { man "$@" | vim -R +":set ft=man" - ; }
这很好用,如果我将manpage
不存在的 a 传递给它,就会出现唯一的问题。它打印出manpage
不存在但仍以vim
空缓冲区打开。
因此,我更改了函数以检查错误代码(在此处),如果不存在16
则退出。manpage
修改后的功能看起来有点像这样 -
viman () { man "$@" | [[ $? == 16 ]] && exit 1 | vim -R +":set ft=man" - ; }
但是,现在它什么也没做!!
manpage
如果不存在,我只想退出程序,否则打开manpage
withvim
试试这个:捕获 man 输出,如果成功启动 vim
我喜欢检查
man
返回码的想法;但是,您无法通过管道进行测试。你可以只运行man
两次:这
man ... | vim ...
仅在第一次调用man
成功时运行。有一个名为的环境变量
MANPAGER
,可用于man
调用您想要显示手册页的命令。这样做的好处是您可以man
直接调用,如果联机帮助页不存在,它根本不会运行分页器。所以一个包装脚本,说
~/bin/vimman
:在你的shell初始化文件中的某个地方:
您可以直接运行
man foo
到 Vim 中的联机帮助页。(根据
man
所使用的命令,您还可以拥有:直接而不是包装脚本。)
如果你有足够新的 Vim,你可以使用该
--not-a-term
选项来阻止 Vim 抱怨 stdin 不是 TTY。无耻插件:我写了一个小插件,方便使用 Vim 作为 manpager。
基于这个答案,如果缓冲区中没有任何内容,它将启动 vim 并退出。缺点是它启动
vim
所以屏幕“闪烁”。man
当找不到页面时,它也不会设置退出代码。这是对 Jeff Schaller 答案的改进,因为它不会在
man
页面存在时加载两次。它也不会vim
像我之前的示例那样不必要地加载。当没有页面时,它确实设置了一个退出代码。man
这两个示例都使用 Bash 进程替换以避免出现“Vim: Reading from stdin...”消息。
两者都不会将页面加载到变量中。
适用于 bash 和 zsh。如果没有进入 nvim 没有找到,则报告错误。