以编程方式将命令发送到vim

时间:2011-12-14 16:08:41

标签: javascript vim

我想在Javascript中构建一个接口,我收集按键并将它们发送到远程vim实例,并让实例报告任何更改。我非常有信心我可以实现所有的浏览器 - 服务器通信和javascript ---我只是不确定如何将数据传递给vim以及如何让它与我交谈。

任何指针都将不胜感激!感谢

修改:可以在Github上找到初始实施。

1 个答案:

答案 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的内容。

实际上,我认为你甚至可以按原样使用上面的脚本。或者至少将其作为自己应用的起点。