如何将 shell 命令的输出通过管道传输到 Vim 中的新缓冲区中?以下显然行不通,但您可以看到我在说什么:
:!echo % | :newtab
Run Code Online (Sandbox Code Playgroud)
gar*_*ohn 33
您不能将 shell 命令的输出通过管道传输到创建新缓冲区的命令中,但您可以创建一个新缓冲区并将 shell 命令的输出读入该缓冲区,并使用 Vim 命令行上的一个条目。您的示例的工作版本将是
:tabnew | r !echo <c-r>=bufname("#")<cr>
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,管道符号是 Vim ex 命令之间的分隔符,而不是 shell 的管道。也可以看看
:help :tabnew
:help :r!
:help :bar
Run Code Online (Sandbox Code Playgroud)
小智 23
这就是我所做的。在上述答案的评论中提到了这一点。
:new | r ! <cmd>
:new | r ! <cmd> # (# is replaced with filename)
Run Code Online (Sandbox Code Playgroud)
示例 1:查找所有文本文件/tmp
:new | r ! find /tmp -name '*.txt'
Run Code Online (Sandbox Code Playgroud)
示例 2:您正在编辑文件 foo.txt 并且想要运行ls -la foo.txt并在缓冲区中获取输出:
:new | r ! ls -la #
Run Code Online (Sandbox Code Playgroud)
将#替换为您正在编辑的原始缓冲区的文件名。这对于特别的源代码控制命令特别有用,例如
:new | r ! hg annotate -un #
Run Code Online (Sandbox Code Playgroud)
:new创建水平拆分,:vnew如果您想要垂直拆分并:tabnew用于新选项卡,请使用。