Answers:
如果您使用参数启动第一个Vim会话--servername VIM
:
$ vim --servername VIM
然后您可以从其他任何shell发出带有参数的命令--remote-send
。
例如,如果使用状态行显示某些变量的值g:myvar
,并且vimrc中包含以下几行:
let g:myvar = "foo"
set stl+=%{g:myvar}
然后,您可以:let g:myvar = "bar"
从另一个shell 更改其值():
$ vim --remote-send ':let g:myvar = "bar"<cr>'
状态行应反映值的变化。
正如您最后的评论所言,如果您的Vim实例不在正常模式下,则先前的命令将无法正常工作。可能更简单,但是这里有两种可能的解决方案:
1)将键添加为<esc>
普通模式
2)使用参数--remote-expr
而不是--remote-send
求值表达式,并编写一个小的辅助函数,其代码会将新值分配给变量
第一个解决方案:
$ vim --remote-send '<esc>:let g:myvar = "bar"<cr>'
第二种解决方案:
在vimrc中定义以下函数:
function! Myfunc(value)
let g:myvar = a:value
endfunction
然后,在您的shell中:
$ vim --remote-expr 'Myfunc("bar")'
+clientserver
功能(github.com/tpope/vim-dispatch/issues/163#issuecomment-175383047)。如果是这样,也许这个插件会为您提供帮助:github.com/mhinz/neovim-remote