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.