繁体   English   中英

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

[英]What is a way to read man pages in vim without using temporary files

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

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

这个脚本使用临时文件,我认为它工作正常,但我想知道是否有一种好方法可以在 vim 中读取手册页而无需使用临时文件

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

将此行放在您的 vimrc 中:

runtime! ftplugin/man.vim

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

:Man 3 printf

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

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

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

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

man ls | vi -

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

vi <(man $1)

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

在我的系统 (Mac OS X) 上,我发现输出中存在上述左侧控制字符。 相反,我使用了:

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

然后只是例如

man vim

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

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

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

您的示例代码是错误的。

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

但你真的只需要

   man $1 | vi -

这就是我所做的,我已经在我的 .bashrc 中使用了这个功能

vman() { vim <(man $1); }

所以当我调用 vman 时,它会自动调用带有标准输入的 vim 男人本身,它工作得很好。

默认情况下,vim 从标准输入读取 vim 脚本(=vim 命令),而不是输入文件。 这就是为什么你不能直接将man输出通过管道传送到 vim; 正如其他人提到的那样,您必须使用vim -使 vim 从 stdin 读取。

然而,管道 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 cat myscript | vim test.txt以达到相同的结果。

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

你也可以在你的 c 函数上按shift-k来打印手册页

我有一个更好的解决方案,我使用的那个,它是这样的:

/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>' -"

希望你会喜欢。

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

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

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

    unset MANPAGER
}

用法:

vman ls

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

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

根据文档查看手册页。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM