什么是在不使用临时文件的情况下在vim中读取手册页的方法

时间:2013-05-24 17:08:59

标签: linux unix vim vi man

我希望能够在vim中阅读手册页。由于某种原因,似乎vim无法通过管道读取程序的输出(即'(man ls)| vi'似乎不起作用,奖励指向可以解释原因的人),并获得围绕这个,我一直在使用以下小脚本:

tempo = `mktemp`
man $1 > $tempo ; vi $tempo

这个脚本使用的临时文件我认为工作正常,但我想知道是否有一种很好的方法来阅读vim中的man页面而不需要使用临时文件

11 个答案:

答案 0 :(得分:33)

Vim在其运行时文件中包含一个手册页查看器:Man

将此行放在你的vimrc中:

runtime! ftplugin/man.vim

现在,您可以通过运行:Man来阅读Vim中的语法高亮显示的手册页。例如:

:Man 3 printf

更好的是,您可以将光标放在缓冲区中的单词上,然后按<Leader>K\K)查看该单词的手册页。

有关完整使用和安装说明,请参阅:h find-manpage

答案 1 :(得分:28)

  

出于某种原因,似乎vim无法通过管道读取程序的输出[...]

根据手册页,您需要指定-的文件以使其从标准输入中读取;这样:

man ls | vi -

如果这不起作用,您可以尝试使用流程替换

vi <(man $1)

创建一种伪文件并将其传递给vi

答案 2 :(得分:9)

在我的系统(Mac OS X)上,我发现上面的左控制字符在输出中。相反,我用过:

export MANPAGER="col -b | vim -MR - "

然后就是这样。

man vim

vim选项关闭修改缓冲区并使其成为只读。如果您尝试以“:q”退出,则会停止vim抱怨(您可以使用:q!当然,您也可以设置选项)。

这对于一般用途也很方便 - 我有以下内容。 -c命令命名缓冲区,只是为了完整性。

alias vimpager="vim -MR -c 'file [stdin]' -"

答案 3 :(得分:4)

您的示例代码错误。

   tempo=`mktemp`
   man $1 > $tempo; vi $tempo

但你真的只需要

   man $1 | vi -

答案 4 :(得分:4)

这就是我所做的,我已经使用此

在我的.bashrc中创建了函数
vman() { vim <(man $1); }

所以当我打电话给vman时,这会自动调用vim和stdin这个人本身,它很有用。

答案 5 :(得分:2)

默认情况下,vim从stdin读取vimscripts(= vim命令),而不是输入文件。这就是为什么你不能直接将man输出管道输出到vim;正如其他人所提到的,你必须使用vim -来从stdin中读取vim。

然而,管道vimscripts也很有用:

vim test.txt <<EOF
:%s/[aiueo]/X/g
:wq! output.txt
EOF

以上将使用vim打开test.txt,用X替换所有元音,将结果写入output.txt,然后退出(忽略对原始文件的更改)。它使用here文档,但您当然可以将vim命令放在一个文件中,并使用vim test.txt < myscriptcat myscript | vim test.txt来获得相同的结果。

我怀疑他们这样做的原因是你可以打开多个输入文件但只执行一个脚本。如果默认情况下从stdin读取输入,则只能读取一个缓冲区。

答案 6 :(得分:1)

我有一个更好的解决方案,我使用的解决方案,就像这样:

/bin/sh -c "unset PAGER;col -b -x | vim -R -c 'set ft=man nomod nolist' -c 'map q :q<CR>' -c 'map <SPACE> <C-D>' -c 'map b <C-U>' -c 'nmap K :Man <C-R>=expand(\"<cword>\")<CR><CR>' -"

希望你会喜欢它。

答案 7 :(得分:1)

您也可以按c功能上的shift-k打印手册页

答案 8 :(得分:0)

我结合了其他人的答案,我正在使用

vman() {
    export MANPAGER="col -b" # for FreeBSD/MacOS

    # Make it read-only
    eval 'man $@ | vim -MR +"set filetype=man" -'

    unset MANPAGER
}

用法:

vman ls

答案 9 :(得分:0)

您始终可以对信息页面使用info命令并执行info {cmd} | vim

答案 10 :(得分:0)

关于插件,很多不错的答案,值得补充的是,vim-man * 提供了一组方便的功能来打开和阅读手册页:

根据文档查看手册页。

  • printf(1)-拆分打开:Vman 3 putc手册页
  • putc(3)-以垂直拆分方式打开:Man pri<Tab>手册页
  • {{1}}- 手册页名称的命令完成

*在GitHub上可用:https://github.com/vim-utils/vim-man