Javascript 以编程方式向vim发送命令

Javascript 以编程方式向vim发送命令,javascript,vim,Javascript,Vim,我想用Javascript构建一个界面,在这里我收集按键并将它们发送到远程vim实例,让该实例报告任何更改。我很有信心我可以实现所有的浏览器服务器通信和javascript——我只是不知道如何将数据传递给vim以及如何让它与我对话 任何提示都将不胜感激!谢谢 编辑:可以在上找到初始实现。看一看(特别是Perl服务器)。也许你会发现有用的想法 --重新编辑-- 既然我喜欢你的想法,我就再看远一点 假设Vim是用+clientserver编译的,您可以这样启动Vim: $ vim --servern

我想用Javascript构建一个界面,在这里我收集按键并将它们发送到远程vim实例,让该实例报告任何更改。我很有信心我可以实现所有的浏览器服务器通信和javascript——我只是不知道如何将数据传递给vim以及如何让它与我对话

任何提示都将不胜感激!谢谢

编辑:可以在上找到初始实现。

看一看(特别是Perl服务器)。也许你会发现有用的想法

--重新编辑--

既然我喜欢你的想法,我就再看远一点

假设Vim是用
+clientserver
编译的,您可以这样启动Vim:

$ vim --servername MYSERVER /path/to/tempfile`
在你的遥控箱上。Vim在服务器模式下启动,您可以向其发送如下命令:

$ vim --servername MYSERVER --remote-send 'ihello<Esc>'
在第一行,如果您发送:

$ vim --servername MYSERVER --remote-send 'A world<Esc>'
$ vim --servername MYSERVER --remote-send 'yy5p'
$ vim --servername MYSERVER --remote-send ':%s/hello/goodbye cruel<CR>'
如果您发送:

$ vim --servername MYSERVER --remote-send 'A world<Esc>'
$ vim --servername MYSERVER --remote-send 'yy5p'
$ vim --servername MYSERVER --remote-send ':%s/hello/goodbye cruel<CR>'
您获得:

hello world
hello world
hello world
hello world
hello world
hello world
goodbye cruel world
goodbye cruel world
goodbye cruel world
goodbye cruel world
goodbye cruel world
如果您发送:

$ vim --servername MYSERVER --remote-send 'A world<Esc>'
$ vim --servername MYSERVER --remote-send 'yy5p'
$ vim --servername MYSERVER --remote-send ':%s/hello/goodbye cruel<CR>'
这有点酷,但是您需要发送回缓冲区的新状态,这可以通过写入临时文件并在每个命令之后将其内容发送回客户端来实现。这意味着服务器上有大量的读/写操作。还可以编写一个宏,在每次“更改”时将缓冲区的内容发送到某个外部进程

--编辑--

如果您遵循链接而不是拒绝我的回答,您会看到上面的扩展是通过HTTP将textarea的内容发送到Perl服务器的

我认为Vim是本地服务器还是远程服务器根本不重要

服务器将其写入一个临时文件,然后用Vim打开该文件

当Vim写入文件时,服务器会将其内容发送回扩展名

您的JS将完成扩展所做的工作:获取textarea的内容,通过AJAX POST请求将其发送到服务器,等待回答并用它更新textarea的内容


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

从未尝试过它,但如果使用它编译vim,则可以在客户机-服务器模式下运行。请参阅以获取一个简单的示例。我想构建一个cloud vim编辑器,而不是本地机器实用程序。谢谢,请更新您的问题。其中没有任何内容表明您想要构建云Vim。什么是云Vim?好吧,你应该从一开始就这么说:我误解了你想做什么,因为你没有解释它。我想到了两件事:1)Vim有很多键绑定,使用侦听器和自定义方法来扩展textarea显然需要超过几Mb的JS。这可能就是您提到的其他客户端编辑器不这样做的原因,也是许多客户端Vim模拟器也不这样做的原因。从这个角度来看,我认为你的想法是好的。2) 有关向正在运行的Vim发送命令的信息,请参阅
:help remote.txt
函数
一章。非常抱歉。重新编辑很精彩。谢谢你花时间。不,我在Ubuntu 10.10桌面上的两个Gnome终端窗口中使用了两个CLI Vim 7.2实例。这当然取决于几个编译标志,因为它在我的办公室、使用MacVim提供的CLI Vim的Mac上或在我的linode上不起作用。