m silent w ! ruby redir END new put=m 它将当前缓冲区的内容作为 Ruby 代码执行,并将输出放入新缓冲区。 但是,-6ren">
gpt4 book ai didi

vim - 在 Vim 中,我可以 "stream"例如的输出吗? "w ! ruby"在输出时逐行放入缓冲区?

转载 作者:行者123 更新时间:2023-12-03 17:08:04 25 4
gpt4 key购买 nike

我目前正在做这样的事情:

redir => m
silent w ! ruby
redir END
new
put=m

它将当前缓冲区的内容作为 Ruby 代码执行,并将输出放入新缓冲区。

但是,如果我运行的 Ruby 代码类似于
puts "start"
sleep 10
puts "end"

然后我会在 10 秒内看不到任何输出,然后同时“开始”和“结束”。

是否有某种方法可以将输出逐行“流式传输”到缓冲区?这样我会看到“开始”,然后 10 秒后我会看到“结束”?类似于如果我这样做会发生什么
w ! ruby

并查看命令行下的输出。

最佳答案

Vim 并没有真正公开这种 I/O 的原语,但您可以通过其中一个嵌入式语言接口(interface)来实现。

这是使用 Python 和 subprocess 绘制的草图(Ruby 看起来很相似;参见 if_ruby ):

python << EOF
import vim
import subprocess

def output_lines_to_buffer(cmd):
"""
Append the given shell command's output linewise to the current buffer.
"""
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
for line in iter(p.stdout.readline, ''):
vim.current.buffer.append(line)
vim.command('redraw')
EOF

要使用:
:python output_lines_to_buffer('my command')

这将简单地将每一行输出附加到当前缓冲区的末尾,如 my command发出它。您可以根据需要直接扩展它以支持输入和输出范围等。

关于vim - 在 Vim 中,我可以 "stream"例如的输出吗? "w ! ruby"在输出时逐行放入缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5329931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com