如何将 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