在外部 (n)vim 命令中引用缓冲区的内容
Referencing contents of buffers in external (n)vim commands
到目前为止,我只找到了 :%! <cmd>
通过外部命令来传输 current 缓冲区的方法。
但我想知道是否有办法打开两个或三个视口并引用它们各自的缓冲区,用于输入参数和外部命令的结果。
简单示例:
我想要一个带有文件的打开视口,一个带有 awk(或 jq 或任何东西)脚本的视口,以及第三个“结果”视口。
然后我想 运行awk(或 jq 等)使用第二个视口中的脚本,运行ning 在第一个视口中的文件上并将结果写入第三个视口。
类似于vim-jqplay的功能(不幸的是它与nvim不兼容)
谢谢!
if there is a way to have two or three viewports open
在 Vim 俚语中称为“windows”。请不要再使用不恰当的术语。
So far I have only found the :%! way to pipe the current buffer through an external command.
其实还有:r !{cmd}
(从cmd读取,即重定向命令的stdout到缓冲区)和:w !{cmd}
(写入cmd,即重定向命令的stdin从缓冲区读取)。
Then I would like to run awk (or jq, etc.) to use the script from the second viewport, running on the file in the first viewport and write the result to the third viewport.
好吧,你意识到你不能同时有两个标准输入重定向,是吗?原则上,你可以这样做
call appendbufline(3, '$', systemlist('gawk -f '..bufname(1), 2))
这里1是脚本缓冲区号,2是数据文件缓冲区,3是目标缓冲区。但请注意,缓冲区 1 仅作为文件名传递(无重定向),因此必须在命令 运行.
之前保存它
但我认为重定向标准输入一点也不重要,因为您也可以传递数据文件名。因此,假设目标缓冲区 (3) 处于活动状态,您可以这样做
:r !gawk -f #1 #2
当然,脚本(缓冲区 1)和数据(缓冲区 2)都必须在 运行 之前保存到磁盘。
到目前为止,我只找到了 :%! <cmd>
通过外部命令来传输 current 缓冲区的方法。
但我想知道是否有办法打开两个或三个视口并引用它们各自的缓冲区,用于输入参数和外部命令的结果。
简单示例: 我想要一个带有文件的打开视口,一个带有 awk(或 jq 或任何东西)脚本的视口,以及第三个“结果”视口。 然后我想 运行awk(或 jq 等)使用第二个视口中的脚本,运行ning 在第一个视口中的文件上并将结果写入第三个视口。
类似于vim-jqplay的功能(不幸的是它与nvim不兼容)
谢谢!
if there is a way to have two or three viewports open
在 Vim 俚语中称为“windows”。请不要再使用不恰当的术语。
So far I have only found the :%! way to pipe the current buffer through an external command.
其实还有:r !{cmd}
(从cmd读取,即重定向命令的stdout到缓冲区)和:w !{cmd}
(写入cmd,即重定向命令的stdin从缓冲区读取)。
Then I would like to run awk (or jq, etc.) to use the script from the second viewport, running on the file in the first viewport and write the result to the third viewport.
好吧,你意识到你不能同时有两个标准输入重定向,是吗?原则上,你可以这样做
call appendbufline(3, '$', systemlist('gawk -f '..bufname(1), 2))
这里1是脚本缓冲区号,2是数据文件缓冲区,3是目标缓冲区。但请注意,缓冲区 1 仅作为文件名传递(无重定向),因此必须在命令 运行.
之前保存它但我认为重定向标准输入一点也不重要,因为您也可以传递数据文件名。因此,假设目标缓冲区 (3) 处于活动状态,您可以这样做
:r !gawk -f #1 #2
当然,脚本(缓冲区 1)和数据(缓冲区 2)都必须在 运行 之前保存到磁盘。