2011-12-14 8 views
6

Me gustaría crear una interfaz en Javascript donde recopile las pulsaciones de teclas y las envíe a una instancia remota de vim para que la instancia informe cualquier cambio. Estoy bastante seguro de que puedo implementar todas las comunicaciones entre navegadores y javascript --- No estoy seguro de cómo pasar los datos a vim y cómo hacer que me respondan.Enviar comandos a vim mediante programación

¡Cualquier puntero sería apreciado! Gracias

Editar: Una implementación inicial se puede encontrar en Github.

+2

Nunca lo intenté, pero si compila vim con ['+ clientserver' support] (http://vimdoc.sourceforge.net/htmldoc/remote.html) se puede ejecutar en modo cliente-servidor. Consulte [esta publicación del blog] (http://ajayfromiiit.wordpress.com/2009/10/21/server-and-client-mode-in-vim/) para obtener un ejemplo simple. –

Respuesta

18

Eche un vistazo a TextAid (específicamente el servidor de Perl). Tal vez encuentres ideas útiles.

--re-EDIT--

Ya que me gusta su idea he mirado un poco más lejos.

Suponiendo Vim se compila con +clientserver, puede iniciar vim como esto:

$ vim --servername MYSERVER /path/to/tempfile` 

en su cuadro de mando a distancia. Vim se puso en marcha en modo de servidor y se puede enviar comandos como:

$ vim --servername MYSERVER --remote-send 'ihello<Esc>' 

que tienen:

hello 

en la primera línea, si envía:

$ vim --servername MYSERVER --remote-send 'A world<Esc>' 

se obtiene:

hello world 

Si usted envía:

$ vim --servername MYSERVER --remote-send 'yy5p' 

obtendrá:

hello world 
hello world 
hello world 
hello world 
hello world 

Si envía:

$ vim --servername MYSERVER --remote-send ':%s/hello/goodbye cruel<CR>' 

obtendrá:

goodbye cruel world 
goodbye cruel world 
goodbye cruel world 
goodbye cruel world 
goodbye cruel world 

que es una especie de fresco pero hay que devolver el nuevo estado del buffer que harías por writin g el archivo temporal y el envío de su contenido al cliente después de cada comando. Eso significa una gran cantidad de lectura/escritura en su servidor. También se podría escribir una macro que envíe el contenido del buffer a algún proceso externo en cada "cambio".

--EDIT--

Si se hubiera seguido el enlace en lugar de despedir a mi respuesta habría visto que la extensión de arriba funciona enviando el contenido del área de texto al servidor de Perl a través de HTTP.

No creo que importe si Vim es local o en un servidor distante.

El servidor lo escribe en un archivo temporal que luego se abre con Vim.

Cuando Vim escribe el archivo, el servidor vuelve a enviar su contenido a la extensión.

Su parte de JS haría lo que hace la extensión: tome el contenido del área de texto, envíelo a través de una solicitud AJAX POST a su servidor, espere una respuesta y actualice el contenido del área de texto.

En realidad, creo que incluso podría usar el script anterior tal como está. O al menos tómalo como punto de partida para tu propia aplicación.

+0

Quiero construir un editor de vim en la nube, no una utilidad de máquina local. Gracias –

+0

Por favor, actualice su pregunta. Nada en él dice que quieres construir una nube Vim. ¿Qué es una nube Vim, de todos modos? – romainl

+0

¿Por qué alguien votó negativamente esta respuesta? Mah .. – lucapette

Cuestiones relacionadas