Jeśli uruchomisz pierwszą sesję Vima z argumentem --servername VIM
:
$ vim --servername VIM
następnie możesz wysłać dowolne polecenie z dowolnej powłoki z argumentem --remote-send
.
Na przykład, jeśli używasz linii statusu, aby wyświetlić wartość jakiejś zmiennej g:myvar
, a masz w vimrc następujące linie:
let g:myvar = "foo"
set stl+=%{g:myvar}
Następnie możesz zmienić jego wartość ( :let g:myvar = "bar"
) z innej powłoki:
$ vim --remote-send ':let g:myvar = "bar"<cr>'
Linia statusu powinna odzwierciedlać zmianę wartości.
Jak mówi twój ostatni komentarz , jeśli twoja instancja Vima nie jest w trybie normalnym, poprzednie polecenie nie będzie działać zgodnie z oczekiwaniami. Mogą być prostsze, ale oto 2 możliwe rozwiązania:
1) dodaj klucz, <esc>
aby być w trybie normalnym
2) użyj argumentu --remote-expr
zamiast --remote-send
do oceny wyrażenia i napisz małą funkcję pomocnika, której kod przypisze nową wartość do twojej zmiennej
Pierwsze rozwiązanie:
$ vim --remote-send '<esc>:let g:myvar = "bar"<cr>'
Drugie rozwiązanie:
Zdefiniuj następującą funkcję w swoim vimrc:
function! Myfunc(value)
let g:myvar = a:value
endfunction
Następnie w twojej powłoce:
$ vim --remote-expr 'Myfunc("bar")'