AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 487415
Accepted
Ritajit Kundu
Ritajit Kundu
Asked: 2018-12-12 10:28:53 +0800 CST2018-12-12 10:28:53 +0800 CST 2018-12-12 10:28:53 +0800 CST

在 vim 中查看手册页

  • 772

我在 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如果不存在,我只想退出程序,否则打开manpagewithvim

bash vim
  • 5 5 个回答
  • 3008 Views

5 个回答

  • Voted
  1. Best Answer
    glenn jackman
    2018-12-12T10:45:45+08:002018-12-12T10:45:45+08:00

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

    viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man" - ; }
    
    • 8
  2. Jeff Schaller
    2018-12-12T11:01:53+08:002018-12-12T11:01:53+08:00

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

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

    这man ... | vim ...仅在第一次调用man成功时运行。

    • 3
  3. muru
    2018-12-12T16:34:34+08:002018-12-12T16:34:34+08:00

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

    所以一个包装脚本,说~/bin/vimman:

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

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

    export MANPAGER="$HOME/bin/vimman"
    

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

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

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

    直接而不是包装脚本。)


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


    无耻插件:我写了一个小插件,方便使用 Vim 作为 manpager。

    • 2
  4. Dennis Williamson
    2018-12-12T15:57:16+08:002018-12-12T15:57:16+08:00

    基于这个答案,如果缓冲区中没有任何内容,它将启动 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...”消息。

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

    • 1
  5. Saurabh Kushwah
    2020-10-05T22:21:12+08:002020-10-05T22:21:12+08:00
    export MANPAGER='nvim +Man!'
    

    适用于 bash 和 zsh。如果没有进入 nvim 没有找到,则报告错误。

    • 0

相关问题

  • 通过命令的标准输出以编程方式导出环境变量[重复]

  • 从文本文件传递变量的奇怪问题

  • 虽然行读取保持转义空间?

  • `tee` 和 `bash` 进程替换顺序

  • 运行一个非常慢的脚本直到它成功

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve