2011-12-14 15 views
6

Vorrei creare un'interfaccia in Javascript in cui raccolgo le pressioni dei tasti e li invii a un'istanza di Vim remota e chiedo all'istanza di segnalare eventuali modifiche. Sono abbastanza sicuro di poter implementare tutte le comunicazioni tra browser e server e javascript --- Non sono sicuro di come trasmettere i dati a Vim e come farlo parlare con me.Inviare comandi a vim a livello di programmazione

Qualsiasi suggerimento sarebbe apprezzato! Grazie

Modifica: Un'implementazione iniziale può essere trovata su Github.

+2

Mai provato, ma se si compila vim con ['+ supporto servererver'] (http://vimdoc.sourceforge.net/htmldoc/remote.html) può essere eseguito in modalità client-server. Vedi [questo post del blog] (http://ajayfromiiit.wordpress.com/2009/10/21/server-and-client-mode-in-vim/) per un semplice esempio. –

risposta

18

Dai uno sguardo allo TextAid (in particolare il server Perl). Forse troverai idee utili.

--re-EDIT--

Visto che mi piace la tua idea Ho guardato un po 'oltre.

Supponendo Vim è stato compilato con +clientserver, è possibile avviare vim come questo:

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

sulla propria macchina remota. Vim viene avviato in modalità server ed è possibile inviare comandi come:

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

di avere:

hello 

sulla prima riga, se si inviano:

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

si ottiene:

hello world 

Se si invia:

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

si ottiene:

hello world 
hello world 
hello world 
hello world 
hello world 

Se si invia:

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

si ottiene:

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

che è sorta di fresco, ma è necessario inviare di nuovo il nuovo stato del buffer che dovresti fare scrivendo g il file temporaneo e inviare il suo contenuto al client dopo il ogni comando. Ciò significa molta lettura/scrittura sul tuo server. Si potrebbe anche scrivere una macro che invia il contenuto del buffer ad un processo esterno su ogni "modifica".

--EDIT--

Se tu avessi seguito il link, invece di licenziare la mia risposta si sarebbe visto che l'estensione sopra funziona inviando il contenuto del textarea al server via HTTP Perl.

Non penso che importi se Vim è locale o su un server remoto.

Il server lo scrive in un file temporaneo che viene quindi aperto con Vim.

Quando Vim scrive il file, il suo contenuto viene quindi rispedito all'estensione dal server.

il vostro pezzo di JS avrebbe fatto quello che fa l'estensione: afferrare il contenuto del textarea, inviarlo via una richiesta AJAX POST al server, attendere una risposta e aggiornare il contenuto della textarea con esso.

In realtà, penso che potresti persino usare lo script sopra così com'è. O almeno prendilo come punto di partenza per la tua app.

+0

Desidero creare un editor di cloud vim, non un programma di utilità della macchina locale. Grazie –

+0

Per favore aggiorna la tua domanda. Nulla in esso dice che vuoi costruire un cloud Vim. Che cos'è un cloud Vim, comunque? – romainl

+0

Perché qualcuno ha downvoted questa risposta? Mah .. – lucapette

Problemi correlati