Parlando con Vim dall'esterno


12

Posso cambiare una variabile in un'istanza di vim da un'altra shell (senza inviare chiavi tramite tmux)?

Lo chiedo perché vorrei utilizzare le opzioni compiling_cmd, success_cmd e failure_cmd di latexmk per mostrare lo stato della compilazione sulla linea di stato.

Forse avrei potuto vim cercare l'esistenza o la non esistenza di determinati file (usando i file come variabili booleane)? Ma questo sembra un po 'sporco; speriamo che ci sia un modo migliore.

Risposte:


19

Se avvii la tua prima sessione di Vim con l'argomento --servername VIM:

$ vim --servername VIM

quindi è possibile inviare qualsiasi comando da qualsiasi altra shell con l'argomento --remote-send.

Ad esempio, se usi la tua statusline per visualizzare il valore di alcune variabili g:myvare hai le seguenti righe nel tuo vimrc:

let g:myvar = "foo"
set stl+=%{g:myvar}

Quindi puoi cambiarne il valore ( :let g:myvar = "bar") da un'altra shell:

$ vim --remote-send ':let g:myvar = "bar"<cr>'

La linea di stato dovrebbe riflettere la modifica del valore.


Come dice il tuo ultimo commento , se l'istanza di Vim non è in modalità normale, il comando precedente non funzionerà come previsto. Potrebbe esserci più semplice, ma qui ci sono 2 possibili soluzioni:

1) aggiungi la chiave <esc>per essere in modalità normale
2) usa l'argomento --remote-exprinvece di --remote-sendvalutare un'espressione e scrivi una piccola funzione di supporto il cui codice assegnerà il nuovo valore alla tua variabile

Prima soluzione:

$ vim --remote-send '<esc>:let g:myvar = "bar"<cr>'

Seconda soluzione:

Definisci la seguente funzione nel tuo vimrc:

function! Myfunc(value)
    let g:myvar = a:value
endfunction

Quindi, nella tua shell:

$ vim --remote-expr 'Myfunc("bar")'

Grazie! Vedo che questa funzione non è stata compilata, quindi ricompilerò. Spero che sia lo stesso in Neovim.
Toothrot

3
@Lawrence Potrei sbagliarmi, ma penso che neovim non implementi la +clientserverfunzione ( github.com/tpope/vim-dispatch/issues/163#issuecomment-175383047 ). In tal caso, forse questo plug-in potrebbe aiutarti: github.com/mhinz/neovim-remote
user9433424

Sembra che questo abbia lo stesso effetto dell'invio di chiavi con tmux e dipende dalla conoscenza della modalità in cui si trova il server vim (l'esempio assume la modalità normale). Idealmente, vorrei essere in grado di impostare direttamente una variabile.
Toothrot
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.