我想在Javascript中构建一个接口,我收集按键并将它们发送到远程vim实例,并让实例报告任何更改。我非常有信心我可以实现所有的浏览器 - 服务器通信和javascript ---我只是不确定如何将数据传递给vim以及如何让它与我交谈。
任何指针都将不胜感激!感谢
修改:可以在Github上找到初始实施。
答案 0 :(得分:20)
查看TextAid(特别是Perl服务器)。也许你会找到有用的想法。
- 重新编辑 -
因为我喜欢你的想法,所以我看起来更进一步。
假设Vim是用+clientserver
编译的,你可以像这样启动vim:
$ vim --servername MYSERVER /path/to/tempfile`
你的遥控盒上的。 Vim以服务器模式启动,您可以发送命令,如:
$ vim --servername MYSERVER --remote-send 'ihello<Esc>'
拥有:
hello
在第一行,如果你发送:
$ vim --servername MYSERVER --remote-send 'A world<Esc>'
你获得:
hello world
如果您发送:
$ vim --servername MYSERVER --remote-send 'yy5p'
你获得:
hello world
hello world
hello world
hello world
hello world
如果您发送:
$ vim --servername MYSERVER --remote-send ':%s/hello/goodbye cruel<CR>'
你获得:
goodbye cruel world
goodbye cruel world
goodbye cruel world
goodbye cruel world
goodbye cruel world
这很酷但你需要通过编写临时文件并将其内容发送回客户端 每个命令后发回缓冲区的新状态。这意味着您的服务器上有很多读/写。还可以编写一个宏,在每次“更改”时将缓冲区的内容发送到某个外部进程。
- 编辑 -
如果您已经关注了链接而不是忽略我的回答,您会看到上面的扩展通过HTTP将文本区域的内容发送到Perl服务器。
如果Vim在本地或远程服务器上,我认为这根本不重要。
服务器将其写入临时文件,然后使用Vim打开该文件。
当Vim写入文件时,服务器会将其内容发送回扩展程序。
您的JS将执行扩展所做的事情:获取textarea的内容,通过AJAX POST请求将其发送到您的服务器,等待答案并用它更新textarea的内容。
实际上,我认为你甚至可以按原样使用上面的脚本。或者至少将其作为自己应用的起点。