我目前正在尝试使用管道作为其stdin和stdout为任何程序构建服务器客户端体系结构。
我的确完成了整个服务器的工作,并且它通过命名管道(fifo)进行通信。我想做的是不断地(异步地)将stdout管道的内容读取到vim缓冲区中,并且我正在寻找解决该问题的最佳方法。
说我有一个程序python,它通过2(如果您考虑stderr,则与查找解决方案无关,则通过3进行通信)管道,即PIPE_IN
作为其stdin,PIPE_OUT
作为其stdout。
我可以从vim(使用:w
)轻松地写入管道,但是如何从PIPE_OUT
读入vim或neovim缓冲区?
这不应该移植到非UNIX系统上,但是我想保持与vim和neovim的兼容性。您对此有何建议?我应该为此使用vimscript语言吗?在这种情况下,使用vim的命令行模式更好吗?还有什么其他可能更优雅的解决方案?
提前感谢!
注意:可以在Soulthym/pyper on GitHub上找到服务器项目的代码以进行测试。
NeoVim和现代Vim支持channels,可用于与外部组件进行异步通信。
特别是NeoVim支持sockconnect()
,它支持命名管道:
将套接字连接到地址。如果
sockconnect()
为{mode}
,则"pipe"
应该是命名管道的路径。 [...]返回频道ID。
[创建频道时,您可以附加回调以在需要读取数据时获取通知。您还具有轮询频道以查看是否有可用数据的功能。
((不过,考虑使用Unix域套接字而不是管道,它们的功能要强大得多。它们是双向的,因此您不需要多对它们。也可以使用它们来实现可以侦听并接受同一地址的多个连接。)