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