从Vim调用OCaml:无法加载共享库dllbin\u prot\u存根

从Vim调用OCaml:无法加载共享库dllbin\u prot\u存根,vim,ocaml,opam,Vim,Ocaml,Opam,我有一个OCaml程序,我想从Vim调用它 在my.vimrc中,我定义了一个命令,该命令应执行OCaml字节码: command! MyCommand call FunctionCallingOCaml() function! FunctionCallingOCaml() let scriptPath = $HOME . "/path/to/myOCamlProgram.byte" let ocamlCmd = "ocamlrun " . scriptPath execute "!

我有一个OCaml程序,我想从Vim调用它

在my
.vimrc
中,我定义了一个命令,该命令应执行OCaml字节码:

command! MyCommand call FunctionCallingOCaml()
function! FunctionCallingOCaml()
  let scriptPath = $HOME . "/path/to/myOCamlProgram.byte"
  let ocamlCmd = "ocamlrun " . scriptPath
  execute "!" . ocamlCmd
endfunction
不幸的是,这不起作用;我收到一条错误消息:

致命错误:无法加载共享库dllbin\u prot\u存根 原因:dllbin_prot_stubs.so:无法打开共享对象文件:没有此类文件或目录

我可以在运行bash的另一个终端上顺利地执行
program.byte

此外,我可以使用
execute
从Vim调用shell内置程序,如
ls
grep
,而不会出现问题


我的系统:

uname-a

Linux marathon 4.12.10-1-ARCH#1 SMP抢先周三8月30日12:18:42 CEST 2017 x86_64 GNU/Linux

opam--版本
:1.2.2


VIM-Vi改进了8.0(2016年9月12日,2017年9月19日编译13:59:47)

结果表明,在运行VIM的shell中,OPAM没有正确初始化。 路径不包括导致错误的OCaml二进制文件

作为修复,我调用
eval$(opam config env)
设置环境变量并修改路径,以便我的Linux安装将从Vim运行OCaml程序:

let ocamlCmd = "eval $(opam config env) && ocamlrun " . scriptPath
execute "!" . ocamlCmd
更好的方法是,将此添加到您的
.bash\u配置文件中,以便您每次登录时都会根据OPAM对shell进行初始化:

. /home/mb/.opam/opam-init/init.sh
shell脚本前面的点将显示它