将 shell 命令(!)的输出通过管道传输到 Vim 中的新缓冲区中

将 shell 命令(!)的输出通过管道传输到 Vim 中的新缓冲区中

如何将 shell 命令的输出通过管道传输到 Vim 中的新缓冲区?以下方法显然行不通,但您可以看到我的意思:

:!echo % | :newtab

答案1

您无法将 shell 命令的输出通过管道传输到创建新缓冲区的命令中,但您可以创建一个新缓冲区,并使用 Vim 命令行上的一个条目将 shell 命令的输出读入该缓冲区。您的示例的一个工作版本将是

:tabnew | r !echo <c-r>=bufname("#")<cr>

请注意,在这种情况下,管道符号是 Vim ex 命令之间的分隔符,而不是 shell 的管道。另请参阅

:help :tabnew
:help :r!
:help :bar

答案2

这是我的做法。上面的答案中的评论中提到了这一点。

:new | r ! <cmd>
:new | r ! <cmd> #   (# is replaced with filename)

示例 1:查找所有文本文件/tmp

:new | r ! find /tmp -name '*.txt'

示例 2:您正在编辑文件 foo.txt,并且想要运行ls -la foo.txt并在缓冲区中获取输出:

:new | r ! ls -la #

#被替换为您正在编辑的原始缓冲区的文件名。这对于临时源代码控制命令特别有用,例如

:new | r ! hg annotate -un #

:new创建水平分割,:vnew如果您想要垂直分割并:tabnew用于新选项卡,请使用。

答案3

:tabnew | enew | r ! <your shell cmd>

对我有用。

答案4

@Ciro Santilli 链接了答案https://stackoverflow.com/a/3826018/9306292

:enew | .! <command>

如果您想保持配置简单,请使用以下之一:

<C-w>v / <C-w>s / yourtabkeybinding, ie <C-w>t

进而

:%!command

相关内容