我问是因为我想使用latexmk的compiling_cmd,success_cmd和failure_cmd选项来显示编译状态。状态线。也许我可以让vim查找某些文件的存在或不存在(使用文件作为布尔变量)?但这似乎有点肮脏。希望有更好的方法。
#1 楼
如果使用参数--servername VIM
启动第一个Vim会话:$ vim --servername VIM
,则可以使用参数
--remote-send
从任何其他shell发送任何命令。 例如,如果使用状态行显示某些变量
g:myvar
的值,并且vimrc中包含以下行:let g:myvar = "foo"
set stl+=%{g:myvar}
然后可以从另一个外壳程序更改其值(
:let g:myvar = "bar"
):$ vim --remote-send ':let g:myvar = "bar"<cr>'
状态行应反映该值的更改。
正如您的最后一条评论所说,如果您的Vim实例不在正常模式下,则先前的命令将无法正常工作。可能更简单,但是有2种可能的解决方案:
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")'
评论
谢谢!我看到没有编译此功能,所以我将重新编译。希望在Neovim中也一样。
–牙
16 Mar 24 '16 at 13:49
@Lawrence我可能是错的,但我认为neovim并未实现+ clientserver功能(github.com/tpope/vim-dispatch/issues/163#issuecomment-175383047)。如果是这样,也许这个插件会为您提供帮助:github.com/mhinz/neovim-remote
–user9433424
16 Mar 24 '16 at 14:09
看来,这与使用tmux发送密钥具有相同的效果,并且取决于了解vim服务器处于哪种模式(本示例假定为正常模式)。理想情况下,我希望能够直接设置一个变量。
–牙
16 Mar 24 '16 at 14:44