繁体   English   中英

在外部 (n)vim 命令中引用缓冲区的内容

[英]Referencing contents of buffers in external (n)vim commands

到目前为止,我只找到了:%! <cmd> :%! <cmd>方式通过外部命令来pipe当前缓冲区。 但我想知道是否有办法让两个或三个视口打开并引用它们各自的缓冲区,用于外部命令的输入参数和结果。

简单示例:我想要一个带有文件的打开视口,一个带有 awk(或 jq 或任何东西)脚本的视口,以及第三个“结果”视口。 然后我想运行 awk (或 jq 等)以使用第二个视口中的脚本,在第一个视口中的文件上运行并将结果写入第三个视口。

类似于 vim-jqplay 所做的(不幸的是它与 nvim 不兼容)

谢谢!

如果有办法打开两个或三个视口

在 Vim 俚语中,它被称为“windows”。 请不要再使用不恰当的术语。

到目前为止,我只找到了:%. pipe 的方式是通过外部命令来缓冲电流。

实际上,还有:r !{cmd} (从 cmd 读取,即将命令的标准输出重定向到缓冲区)和:w !{cmd} (写入 ZDFFF0A7FA1A55C8C1A424 以从缓冲区读取)命令'重定向。

然后我想运行 awk (或 jq 等)以使用第二个视口中的脚本,在第一个视口中的文件上运行并将结果写入第三个视口。

好吧,你意识到你不能同时有两个标准输入重定向,是吗? 原则上,你可以做类似的事情

call appendbufline(3, '$', systemlist('gawk -f '..bufname(1), 2))

这里 1 是脚本缓冲区号,2 是数据文件 bufnr,3 是目标 bufnr。 但请注意,缓冲区 1 仅作为文件名传递(无重定向),因此必须在命令运行之前保存它。

但我认为重定向标准输入根本不重要,因为您也可以传递数据文件名。 因此,假设目标缓冲区 (3) 处于活动状态,您可以这样做

:r !gawk -f #1 #2

当然,脚本(缓冲区 1)和数据(缓冲区 2)都必须在运行之前保存到磁盘。

暂无
暂无

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

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