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

我想能够阅读vim中的手册页。 由于某种原因,vim似乎无法通过pipe道读取程序的输出(即'(man ls)| vi'似乎不工作,奖励指向某人可以解释为什么),并得到在这附近,我一直在使用下面的小脚本:

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

这个脚本使用的临时文件,我猜工作正常,但我想知道是否有一个好的方法来读取VIM的手册页,而不诉诸临时文件

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

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

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

 man ls | vi - 

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

 vi <(man $1) 

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

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

把这行放在你的vimrc里:

 runtime! ftplugin/man.vim 

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

 :Man 3 printf 

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

请参阅:h find-manpage以获取完整的使用和安装说明。

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

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

然后就是例如

 man vim 

vim选项关闭修改缓冲区并使其成为只读。 如果你尝试用“:q”退出(这可以使用: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和stdin这个人本身,这很好。

默认情况下,vim从标准输入读取vimscripts(= vim命令),而不是输入文件。 这就是为什么你不能直接把man输出到vim; 正如其他人所提到的,你必须使用vim -从标准输入读取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 cat myscript | vim test.txt来达到同样的效果。

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

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

 /bin/sh -c "unset PAGER;col -b -x | vim -R -c 'set ft=man nomod nolist' -c 'map q :q<CR>' -c 'map <SPACE> <CD>' -c 'map b <CU>' -c 'nmap K :Man <CR>=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 

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