Quali sono gli usi pratici della modalità client-server?


23

So che Vim consente una modalità server client ( :h clientserver): è possibile trasformarlo in un server che riceverà alcuni comandi ed eseguirli e come client che invierà i comandi al server.

Capisco come funziona, ma non riesco a immaginare un uso pratico di questa funzione: in quali casi è utile e quale flusso di lavoro può essere creato usando questa funzione?

Quindi la mia domanda è semplice: a che serve la modalità server client di Vim?

(Sottolineo ancora che la mia domanda non riguarda come farlo funzionare o come funziona, ma perché usarlo.)



2
Sono propenso a chiudere questo come troppo ampio.
muru,

3
Comprenderei la chiusura come troppo ampia. SE forse non è la piattaforma più adatta a questa domanda, ma mi sento come se mi mancasse qualcosa su questa funzione, quindi ho pensato che altri avrebbero potuto beneficiare di queste risposte.
statox

Risposte:


21
  • Prima della recente funzione di canale / lavoro di Vim 7.4, la funzione client-server era l'unico modo per eseguire una compilazione in background decente, senza alcuna dipendenza da Python. Iniziamo la compilazione come processo in background e, quando termina, avvisa di nuovo, grazie al canale client-server, che ha terminato.

  • È anche indirettamente utilizzato da "plugin" come pyclewn per integrare un debugger in vim. In realtà pyclewn utilizza la funzione + netbeans (che si basa su + clienterver). Altri importanti progetti usano questa interfaccia netbeans per integrare vim con un IDE - vedi :h netbeans-intro.

  • È anche usato da alcuni plugin di test come vimrunner per eseguire test in Vim dalla riga di comando. Lo uso per testare i miei plugin su travis.

  • Ricordo anche di aver sincronizzato i miei clic nell'interfaccia xdvi con il mio codice sorgente LaTeX grazie a + clientserver.


1
Quindi è utile non essere utilizzato direttamente dall'utente ma da un'applicazione di terze parti. Grazie per la tua risposta che è piuttosto interessante.
statox

4
@statox Sì. Ecco i principali casi d'uso che vedo: semplice integrazione con strumenti esterni. Semplice perché possiamo alimentare comandi e funzioni vim attraverso la riga di comando.
Luc Hermitte,

1
Eclim è un altro esempio di questo.
riccioli d'oro,

13

Il mio uso di questo è un po 'più semplicistico (e forse banale) di quello di Luc Hermitte.

Se avvii un'istanza di gvim con questo compilato in (ed è, ed è stato per molto tempo, ad esempio su importanti distribuzioni Linux come Fedora e Debian), si avvia in modalità server. Ho enfatizzato "gvim" perché ciò che sto per descrivere non sembra applicarsi a vimun'istanza singolare in un terminale GUI (anche se suppongo che potrebbe essere se si utilizza il parametro in modo appropriato).

Ad ogni modo, puoi quindi aprire qualsiasi file da qualsiasi punto dell'istanza gvim con gvim --remote [file path](senza --servernamespecificare). Sono un fan di questo perché non navigo molto nel filesystem direttamente con vim; invece uso un browser di file ortodossi (comandante di mezzanotte) - o meglio, pile di esse si aprono in posizioni diverse poiché mcsono leggere e consentono a varie combinazioni di combinazioni di colori di semplificare la differenziazione tra loro (quindi tendo ad avere due o tre aperte in separato schede in almeno un terminale GUI). Tuttavia, penso che lo stesso principio si applicherà a qualsiasi browser di file che consente una qualche forma di tasto di scelta rapida personalizzato che è possibile associare gvim --remote %f. Ne mcho nel menu utente, quindi F2 + e e il file evidenziato / selezionato vengono inviati all'istanza gvim.

Questo migliora un po ': se apri una seconda istanza di gvim, diciamo, sul monitor n. 2 dello stesso desktop, o su un desktop separato, e forse un diverso schema di colori in quello, e questa volta dagli un esplicito --servername foo, puoi inviare file in quell'istanza invece con:

 gvim --servername foo --remote [file path]

Qualcosa che può tornare utile o meno a seconda dell'ambito di ciò che stai facendo, ecc.


Questo è un caso d'uso che non avevo previsto, ma in effetti se non ti piace navigare tra i tuoi file da Vim può essere una buona soluzione.
statox

Bene, non lo considero un "aggiramento" poiché l'altra cosa che sto facendo, minimamente, con il browser dei file allo stesso tempo è dare un'occhiata ai file nelle stesse posizioni (per il testo via less, che è istantaneo e uno chiave per uscire) e possibilmente inviarli ad applicazioni diverse da VIM che hanno anche una modalità remota come questa (molte cose lo fanno ora, inclusi altri "editor" che a volte uso per lasciare le schede sovrapposte delle intestazioni per la visualizzazione e anche i browser Web) . In altre parole, direi che navigare su fs con vim sembra un modo per aggirare per non usare mce --remote
;;

1
Sì, questo è un flusso di lavoro in sé e non una soluzione alternativa, il mio fraseggio non era l'ideale, ma ho capito l'idea della tua risposta ;-)
statox

1
Quando lavoro con Visual Studio, eseguo la maggior parte delle mie modifiche in Vim. Uso questa funzione per aprire il file corrente (con il cursore nella stessa posizione) alla pressione di un tasto. Vedere Vim come sezione di uno strumento esterno nella pagina Integrazione di gvim con Visual Studio Vim Suggerimenti per la configurazione.
Rich

5

Sviluppo integrato. Molte volte nello sviluppo integrato si dispone di un socket IP, ma lo spazio sul disco rigido locale è limitato, o nessuna memoria non volatile o un numero qualsiasi di altre cose. È possibile avviare un server sulla scheda integrata, quindi client al suo interno sul computer di sviluppo e avere tutta la configurazione e i tag impostati localmente.


1

Ho scritto la mia tesi di master usando Vim, LaTeX e BibTeX. Per gestire i miei riferimenti BibTeX, ho usato un programma chiamato JabRef . JabRef ha una piccola funzionalità in cui è possibile collegarlo a un'istanza del server Vim, quindi è possibile "inviare" il riferimento BibTeX da JabRef al documento LaTeX che si sta modificando in Vim.


1

Il mio flusso di lavoro è simile a quello che hanno affermato i goldilock nella sua risposta. Uso la :terminalfunzione di vim8 in combinazione con l' --remoteopzione. Mantengo 2 layout di finestra in vim. Codice nella finestra a sinistra e terminale a destra. Uso la finestra giusta (terminale) per eseguire compilation, navigare nel file system e aprire i file nell'istanza corrente di vim (dal terminale). Questo flusso mi consente di operare con un coinvolgimento del mouse molto minore.

Uso gvim e icewm (qualsiasi gestore di finestre dovrebbe fare)

Avvia un'istanza di gvim

gvim somefile

Dentro gvim, terminale aperto in divisione verticale

:botright vertical terminal
(or) short form
:bo vert term 
"botright" splits the window to right

Nella finestra terminale divisa

gvim --remote-send '<C-w><C-w>' --remote anotherfile

"--remote-send" will send Ctrl-W Ctrl-W to remote gvim instance(in our case, current instance) 
to put the cursor in the left window. Otherwise, the terminal split would be replaced by
'anotherfile' buffer.
"--remote" will open 'anotherfile' in left window.

Puoi creare alias a questi comandi lunghi nel tuo .zshrc / .bashrc e accorciarli a tuo piacimento.

Con questo flusso di lavoro, raramente esco dalla mia istanza gvim e uso raramente il mouse.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.