Se você iniciar sua primeira sessão do Vim com o argumento --servername VIM
:
$ vim --servername VIM
então você pode enviar qualquer comando de qualquer outro shell com o argumento --remote-send
.
Por exemplo, se você usar sua linha de status para exibir o valor de alguma variável g:myvar
e tiver as seguintes linhas no seu vimrc:
let g:myvar = "foo"
set stl+=%{g:myvar}
Então você pode alterar seu valor ( :let g:myvar = "bar"
) de outro shell:
$ vim --remote-send ':let g:myvar = "bar"<cr>'
A linha de status deve refletir a alteração do valor.
Como seu último comentário diz, se sua instância do Vim não estiver no modo normal, o comando anterior não funcionará conforme o esperado. Pode ser mais simples, mas aqui estão 2 soluções possíveis:
1) adicione a chave <esc>
para estar no modo normal
2) use o argumento em --remote-expr
vez de --remote-send
avaliar uma expressão e escreva uma pequena função auxiliar cujo código atribuirá o novo valor à sua variável
Primeira solução:
$ vim --remote-send '<esc>:let g:myvar = "bar"<cr>'
Segunda solução:
Defina a seguinte função no seu vimrc:
function! Myfunc(value)
let g:myvar = a:value
endfunction
Então, no seu shell:
$ vim --remote-expr 'Myfunc("bar")'